Package com.betfair.cougar.core.api.exception

Examples of com.betfair.cougar.core.api.exception.CougarServiceException


            if (encoding!=null) {
                marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, encoding);
            }
      marshaller.marshal(result, xmlWriter);
        } catch (final XMLStreamException e) {
            throw new CougarServiceException(getServerFaultCode(e), "Failed to stream object to XML", e);
        } catch (final JAXBException e) {
            throw new CougarServiceException(getServerFaultCode(e), "Failed to marshall object to XML", e);
        } finally {
          if (xmlWriter != null) {
        try {
          xmlWriter.close();
        } catch (final XMLStreamException ignored) {}
View Full Code Here


        xmlWriter.writeEndElement();
        xmlWriter.writeEndDocument();
       
        } catch (final XMLStreamException e) {
            throw new CougarServiceException(getServerFaultCode(e), "Failed to stream fault "+fault.getClass()+" to XML", e);
        } catch (final JAXBException e) {
            throw new CougarServiceException(getServerFaultCode(e), "Failed to marshall fault "+fault.getClass()+" to XML", e);
        }
        finally {
          if (xmlWriter != null) {
        try {
          xmlWriter.close();
View Full Code Here

            }
            throw new CougarValidationException(ServerFaultCode.XMLDeserialisationFailure, e);
        } catch (CougarValidationException e) {
            throw e;
    } catch (Exception e) {
      throw new CougarServiceException(ServerFaultCode.XMLDeserialisationFailure, "Unable to deserialise REST/XML request", e);
        }
  }
View Full Code Here

      Reader reader = new BufferedReader(new InputStreamReader(inputStream,encoding));
      return objectMapper.readValue(reader, clazz);
    } catch (JsonProcessingException e) {
      throw new CougarValidationException(ServerFaultCode.JSONDeserialisationParseFailure, e);
    } catch (IOException e) {
      throw new CougarServiceException(ServerFaultCode.JSONDeserialisationParseFailure, "Failed to unmarshall object", e);
    }
  }
View Full Code Here

            }
            else {
                return objectMapper.readValue(reader, buildJavaType(parameterType));
            }
        } catch (JsonProcessingException e) {
            throw new CougarServiceException(ServerFaultCode.JSONDeserialisationParseFailure, "Failed to unmarshall object", e);
        } catch (IOException e) {
            throw new CougarServiceException(ServerFaultCode.JSONDeserialisationParseFailure, "Failed to unmarshall object", e);
        }

    }
View Full Code Here

  @Override
  public void marshall(OutputStream outputStream, Object result, String encoding) {
    try {
      objectMapper.writeValue(outputStream, result);
    } catch (JsonProcessingException e) {
            throw new CougarServiceException(ServerFaultCode.JSONSerialisationFailure, "Failed to marshall object of class "+result.getClass().getCanonicalName()+" to JSON", e);
    } catch (IOException e) {
            throw new CougarServiceException(ServerFaultCode.OutputChannelClosedCantWrite, "Failed to write JSON object to stream", e);
        }
  }
View Full Code Here

        final NewHeapSubscription newHeapSubscription;
        try {
            newHeapSubscription = (NewHeapSubscription) in.getResult();
        } catch (Exception e) {
            logger.log(Level.WARNING, "Error unpacking subscription result", e);
            observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.FrameworkError, "Error unpacking subscription result", e)));
            return;
        }
        nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Received a subscription response for heapId %s with subscriptionId %s", newHeapSubscription.getHeapId(), newHeapSubscription.getSubscriptionId());

        final String sessionId = NioUtils.getSessionId(currentSession);
        ConnectedHeaps heaps;
        heapSubMutationLock.lock();
        try {
            heaps = heapsByServer.get(sessionId);
            if (heaps == null) {
                heaps = new ConnectedHeaps();
                heapsByServer.put(sessionId, heaps);
            }
        } finally {
            heapSubMutationLock.unlock();
        }

        // new heap
        boolean newHeap = false;
        if (newHeapSubscription.getUri() != null) {
            nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Received a new heap definition, heapId = %s, heapUrl = %s", newHeapSubscription.getHeapId(), newHeapSubscription.getUri());
            newHeap = heaps.addHeap(newHeapSubscription.getHeapId(), newHeapSubscription.getUri());
            if (!newHeap) {
                nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Received a new heap definition, heapId = %s, even though we know about the heap already!", newHeapSubscription.getHeapId());
            }
        }
        final boolean preExistingHeap = !newHeap;

        // find heap uri
        final HeapState heapState = heaps.getHeapState(newHeapSubscription.getHeapId());
        if (heapState == null) {
            nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Couldn't find heap definition, heapId = %s", newHeapSubscription.getHeapId());
            logger.log(Level.WARNING, "Can't find the heap for this subscription result. Heap id = " + newHeapSubscription.getHeapId());
            observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.FrameworkError, "Can't find the heap for this subscription result. Heap id = " + newHeapSubscription.getHeapId())));
        } else {
            if (preExistingHeap && heapState.haveSeenInitialUpdate()) {
                Subscription sub = heapState.addSubscription(this, currentSession, newHeapSubscription.getHeapId(), newHeapSubscription.getSubscriptionId());
                if (sub != null) {
                    observer.onResult(new ExecutionResult(new ConnectedResponseImpl(heapState.getHeap(), sub)));
                } else {
                    // null sub means we already had a subscription with that id, something's not in a good state in the server, so kill this connection as we don't know what's going on
                    nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Duplicate subscription returned by the server, id = %s - closing session", newHeapSubscription.getSubscriptionId());
                    logger.log(Level.WARNING, "Duplicate subscription returned by the server, id = " + newHeapSubscription.getSubscriptionId() + " - closing session");
                    observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.FrameworkError, "Duplicate subscription returned by the server, id = " + newHeapSubscription.getSubscriptionId())));
                    currentSession.close();
                }
            } else {
                // split this off into it's own thread since the mina docs lie and we only have one ioprocessor thread and if we don't fork we'd block forever
                final ConnectedHeaps finalHeaps = heaps;
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        boolean resultSent = false;
                        // now we've got the heap
                        CountDownLatch initialPopulationLatch = finalHeaps.getInitialPopulationLatch(newHeapSubscription.getHeapId());
                        try {
                            boolean populated = false;
                            if (initialPopulationLatch != null) {
                                nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Waiting for initial heap population, heapUrl = %s", newHeapSubscription.getUri());
                                populated = initialPopulationLatch.await(maxInitialPopulationWait, TimeUnit.MILLISECONDS);
                                finalHeaps.removeInitialPopulationLatch(newHeapSubscription.getHeapId());
                            } else {
                                nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Initial heap population, heapUrl = %s", newHeapSubscription.getUri());

                            }
                            nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Returning heap to client, heapUrl = %s", newHeapSubscription.getUri());
                            if (populated) {
                                observer.onResult(new ExecutionResult(new ConnectedResponseImpl(heapState.getHeap(), heapState.addSubscription(ClientConnectedObjectManager.this, currentSession, newHeapSubscription.getHeapId(), newHeapSubscription.getSubscriptionId()))));
                                resultSent = true;
                            }
                        } catch (InterruptedException e) {
                            // we got interrupted waiting for the response, oh well..
                        } catch (RuntimeException e) {
                            logger.log(Level.WARNING, "Error processing initial heap population, treating as a failure", e);
                        } finally {
                            if (!resultSent) {
                                nioLogger.log(NioLogger.LoggingLevel.TRANSPORT, currentSession, "Didn't get initial population message for heap, heapUrl = %s", newHeapSubscription.getUri());
                                // we don't worry about the case where it was a preExisting heap since the thread where it wasn't received will deal with it
                                if (!preExistingHeap) {
                                    terminateSubscriptions(currentSession, newHeapSubscription.getHeapId(), Subscription.CloseReason.INTERNAL_ERROR);
                                }
                                logger.log(Level.WARNING, "Didn't get initial population message for heap id = " + newHeapSubscription.getHeapId());
                                observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.FrameworkError, "Didn't get initial population message for heap id = " + newHeapSubscription.getHeapId())));
                            }
                        }
                    }
                }, "SubscriptionResponseHandler-InitialPopulation-" + initialPopulationThreadIdSource.incrementAndGet() + "-" + heapState.getHeapUri()).start();
            }
View Full Code Here

                LOG.log(Level.SEVERE, "An attempt was made to execute a method when the client was not connected!");
                if (LOG.isLoggable(Level.FINE)) {
                    LOG.log(Level.FINE,
                            "Operation: " + def.getOperationKey() + " with parameters: " + Arrays.toString(args));
                }
                observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.FrameworkError,
                        "This Client is not connected to a server so this call cannot be completed!")));
            } else {
                try {
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte protocolVersion = CougarProtocol.getProtocolVersion(session);
                    final CougarObjectOutput out = objectIOFactory.newCougarObjectOutput(baos, protocolVersion);

//                    addObserver(correlationId, def.getReturnType(), observer);
                    marshaller.writeInvocationRequest(new InvocationRequest() {

                        @Override
                        public Object[] getArgs() {
                            return args;
                        }

                        @Override
                        public ExecutionContext getExecutionContext() {
                            return ctx;
                        }

                        @Override
                        public OperationKey getOperationKey() {
                            return def.getOperationKey();
                        }

                        @Override
                        public Parameter[] getParameters() {
                            return def.getParameters();
                        }

                        @Override
                        public TimeConstraints getTimeConstraints() {
                            return timeConstraints;
                        }
                    }, out, getIdentityResolver(), protocolVersion);
                    out.close();

                    ((RequestResponseManager) session.getAttribute(RequestResponseManager.SESSION_KEY)).sendRequest(baos.toByteArray(), new RequestResponseManager.ResponseHandler() {
                        @Override
                        public void responseReceived(ResponseMessage message) {
                            CougarObjectInput in = objectIOFactory.newCougarObjectInput(new ByteArrayInputStream(message.getPayload()), CougarProtocol.getProtocolVersion(session));

                            try {
                                EnumUtils.setHardFailureForThisThread(hardFailEnumDeserialisation);
                                InvocationResponse response = marshaller.readInvocationResponse(def.getReturnType(), in);
                                // connected object calls need some additional setup prior to responding to the observer
                                if (def.getOperationKey().getType() == OperationKey.Type.ConnectedObject && response.isSuccess()) {
                                    connectedObjectManager.handleSubscriptionResponse(session, response, observer);
                                }
                                else {
                                    response.recreate(observer, def.getReturnType(), message.getPayload().length);
                                }
                            } catch (Exception e) {
                                observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.BinDeserialisationParseFailure, "Unable to deserialise response, closing session", e)));
                                if (session.isConnected()) {
                                    logger.log(NioLogger.LoggingLevel.SESSION, session, "Error occurred whilst trying to deserialise response, closing session");
                                    // it is possible that we never get here
                                    session.close();
                                }
                            }
                        }

                        @Override
                        public void timedOut() {
                            observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.Timeout, "Exception occurred in Client: Read timed out: "+NioUtils.getRemoteAddressUrl(session))));
                        }

                        @Override
                        public void sessionClosed() {
                            observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.RemoteCougarCommunicationFailure, "Connectivity to remote server lost!")));
                        }
                    });
                } catch (Throwable e) {
                    observer.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.FrameworkError,
                            "An exception occurred with remote method call", e)));
                }
            }
        }
    }
View Full Code Here

    public void notifyObservers(int state) {
        synchronized (executionObservers) {
            for (WeakReference<ExecutionObserver> ref : executionObservers) {
                ExecutionObserver obs = ref.get();
                if (obs != null) {
                    obs.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.JMSTransportCommunicationFailure, "Connection to Sonic has been lost")));
                }
            }
            executionObservers = new HashSet<WeakReference<ExecutionObserver>>();
        }
    }
View Full Code Here

            return;
        }

        CougarException ce = executionResult.getFault();
        if (ce instanceof CougarClientException) {
            wrapped.onResult(new ExecutionResult(new CougarServiceException(ServerFaultCode.ServiceRuntimeException,"Unhandled client exception",ce)));
        }
        else {
            wrapped.onResult(executionResult);
        }
    }
View Full Code Here

TOP

Related Classes of com.betfair.cougar.core.api.exception.CougarServiceException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.