@Override public ExchangeState getState() { return getExchange().getState(); }
@Override public ExchangeState getState() { return getExchange().getState(); }
@Override public void handle(Exchange exchange) { if (exchange.getState() == ExchangeState.FAULT) { handleFault(exchange); } else { handleMessage(exchange); } }
@Override public void handle(Exchange exchange) { if (exchange.getState() == ExchangeState.FAULT) { handleFault(exchange); } else { handleMessage(exchange); } }
/** * Update metric data based on the specified exchange. * @param exchange an exchange with metrics info */ public synchronized void recordMetrics(Exchange exchange) { if (exchange.getState().equals(ExchangeState.FAULT)) { _faultCount.incrementAndGet(); } else { _successCount.incrementAndGet(); } Property prop = exchange.getContext().getProperty(ExchangeCompletionEvent.EXCHANGE_DURATION); if (prop != null) { Long duration = (Long)prop.getValue(); _totalTimeMS.addAndGet(duration); // check minTime if (_minTimeMS.intValue() == 0 || duration < _minTimeMS.intValue()) { _minTimeMS.set(duration.intValue()); } // check maxTime if (_maxTimeMS.intValue() == 0 || duration > _maxTimeMS.intValue()) { _maxTimeMS.set(duration.intValue()); } } }
@Override public void process(Exchange ex) throws Exception { org.switchyard.Exchange exchange = new CamelExchange(ex); for (ExchangeHandler handler : _handlers) { if (exchange.getState() == ExchangeState.FAULT) { handler.handleFault(exchange); } else { handler.handleMessage(exchange); } } }
@Override public void process(Exchange ex) throws Exception { org.switchyard.Exchange exchange = new CamelExchange(ex); for (ExchangeHandler handler : _handlers) { if (exchange.getState() == ExchangeState.FAULT) { handler.handleFault(exchange); } else { handler.handleMessage(exchange); } } }
@Override public void handleMessage(Exchange exchange) { HandlerRef handlerRef = null; try { for (HandlerRef ref : listHandlers()) { handlerRef = ref; if (_logger.isDebugEnabled()) { _logger.debug("Executing ExchangeHandler (" + ref + ") on message Exchange instance (" + System.identityHashCode(exchange) + ")."); } ref.getHandler().handleMessage(exchange); if (exchange.getState() == ExchangeState.FAULT) { // Exchange state has changed to FAULT. // Stop executing handlers.... break; } } } catch (HandlerException handlerEx) { StringBuilder errorMsg = new StringBuilder(handlerEx.getClass().getName() + " was thrown by handler(" + handlerRef.getName() + "): " + handlerEx.getMessage()); Throwable cause = handlerEx; while ((cause = cause.getCause()) != null) { errorMsg.append(" --- Caused by " + cause.getClass().getName() + ": " + cause.getMessage()); } _logger.error(errorMsg.toString()); _logger.debug("", handlerEx); Message faultMessage = exchange.createMessage().setContent(handlerEx); exchange.sendFault(faultMessage); } }
@Override public void handleMessage(Exchange exchange) { HandlerRef handlerRef = null; try { for (HandlerRef ref : listHandlers()) { handlerRef = ref; if (_logger.isDebugEnabled()) { _logger.debug("Executing ExchangeHandler (" + ref + ") on message Exchange instance (" + System.identityHashCode(exchange) + ")."); } ref.getHandler().handleMessage(exchange); if (exchange.getState() == ExchangeState.FAULT) { // Exchange state has changed to FAULT. // Stop executing handlers.... break; } } } catch (HandlerException handlerEx) { StringBuilder errorMsg = new StringBuilder(handlerEx.getClass().getName() + " was thrown by handler(" + handlerRef.getName() + "): " + handlerEx.getMessage()); Throwable cause = handlerEx; while ((cause = cause.getCause()) != null) { errorMsg.append(" --- Caused by " + cause.getClass().getName() + ": " + cause.getMessage()); } _logger.error(errorMsg.toString()); _logger.debug("", handlerEx); Message faultMessage = exchange.createMessage().setContent(handlerEx); exchange.sendFault(faultMessage); } }
@Override public void after(String target, Exchange exchange) throws HandlerException { // We only want to intercept successful replies from OrderService if (exchange.getProvider().getName().getLocalPart().equals("OrderService") && ExchangeState.OK.equals(exchange.getState())) { OrderAck orderAck = exchange.getMessage().getContent(OrderAck.class); orderAck.setStatus(orderAck.getStatus() + " [intercepted]"); } }
@Override public void after(String target, Exchange exchange) throws HandlerException { // We only want to intercept successful replies from OrderService if (exchange.getProvider().getName().getLocalPart().equals("OrderService") && ExchangeState.OK.equals(exchange.getState())) { OrderAck orderAck = exchange.getMessage().getContent(OrderAck.class); orderAck.setStatus(orderAck.getStatus() + " [intercepted]"); } }
private static String formatHeaders(Exchange exchange) { StringBuilder headers = new StringBuilder() .append(indent(0) + "Consumer -> " + exchange.getConsumer().getName()) .append(indent(0) + "Provider -> " + ((exchange.getProvider() == null) ? "[unassigned]" : exchange.getProvider().getName())) .append(indent(0) + "Operation -> " + exchange.getContract().getConsumerOperation().getName()) .append(indent(0) + "MEP -> " + ((exchange.getContract().getConsumerOperation().getExchangePattern() == null) ? "[unassigned]" : exchange.getContract().getConsumerOperation().getExchangePattern())) .append(indent(0) + "Phase -> " + exchange.getPhase()) .append(indent(0) + "State -> " + exchange.getState()); // Add context properties headers.append(indent(0) + "Exchange Context -> "); dumpContext(headers, exchange.getContext().getProperties(Scope.EXCHANGE)); headers.append(indent(0) + "Message Context -> "); dumpContext(headers, exchange.getContext().getProperties(Scope.MESSAGE)); return headers.toString(); }
private static String formatHeaders(Exchange exchange) { StringBuilder headers = new StringBuilder() .append(indent(0) + "Consumer -> " + exchange.getConsumer().getName()) .append(indent(0) + "Provider -> " + ((exchange.getProvider() == null) ? "[unassigned]" : exchange.getProvider().getName())) .append(indent(0) + "Operation -> " + exchange.getContract().getConsumerOperation().getName()) .append(indent(0) + "MEP -> " + ((exchange.getContract().getConsumerOperation().getExchangePattern() == null) ? "[unassigned]" : exchange.getContract().getConsumerOperation().getExchangePattern())) .append(indent(0) + "Phase -> " + exchange.getPhase()) .append(indent(0) + "State -> " + exchange.getState()); // Add context properties headers.append(indent(0) + "Exchange Context -> "); dumpContext(headers, exchange.getContext().getProperties(Scope.EXCHANGE)); headers.append(indent(0) + "Message Context -> "); dumpContext(headers, exchange.getContext().getProperties(Scope.MESSAGE)); return headers.toString(); }
@Override public void process(Exchange ex) throws Exception { org.switchyard.Exchange syEx = new CamelExchange(ex); if (syEx.getState() == ExchangeState.FAULT) { ExchangeHandler handler = syEx.getReplyHandler(); if (handler != null) { handler.handleFault(syEx); } } else { // Only call back with reply messages if the MEP is In-Out if (ExchangePattern.IN_OUT.equals(syEx.getPattern())) { syEx.getReplyHandler().handleMessage(syEx); } } } }
@Override public void process(Exchange ex) throws Exception { org.switchyard.Exchange syEx = new CamelExchange(ex); if (syEx.getState() == ExchangeState.FAULT) { ExchangeHandler handler = syEx.getReplyHandler(); if (handler != null) { handler.handleFault(syEx); } } else { // Only call back with reply messages if the MEP is In-Out if (ExchangePattern.IN_OUT.equals(syEx.getPattern())) { syEx.getReplyHandler().handleMessage(syEx); } } } }
@Test public void testFaultWithNoHandler() throws Exception { final QName serviceName = new QName("testFaultWithNoHandler"); // Provide the service MockHandler provider = new MockHandler() { @Override public void handleMessage(Exchange exchange) throws HandlerException { throw new HandlerException("Fault With No Handler!"); } }; ServiceReference service = _domain.createInOnlyService(serviceName, provider); // Consume the service Exchange exchange = service.createExchange(); exchange.send(exchange.createMessage()); // Make sure the exchange is in fault status Assert.assertEquals(ExchangeState.FAULT, exchange.getState()); }
/** * Send an IN_ONLY message to the target Service. * @param messagePayload The message payload. * @throws InvocationFaultException if the message exchange produces a fault */ public void sendInOnly(Object messagePayload) throws InvocationFaultException { ExchangeHandlerProxy exchangeHandlerProxy = _exchangeHandlerProxy; ResponseCatcher responseCatcher = null; if (exchangeHandlerProxy == null) { responseCatcher = new ResponseCatcher(); exchangeHandlerProxy = createHandlerProxy(responseCatcher); } Exchange exchange = createExchange(ExchangePattern.IN_ONLY, exchangeHandlerProxy._exchangeHandlerProxy); Message message = exchange.createMessage().setContent(messagePayload); setProperties(exchange, message); addAttachments(message); exchange.send(message); if (exchange.getState().equals(ExchangeState.FAULT)) { throw new InvocationFaultException(exchange.getMessage()); } }
/** * Send an IN_ONLY message to the target Service. * @param messagePayload The message payload. * @throws InvocationFaultException if the message exchange produces a fault */ public void sendInOnly(Object messagePayload) throws InvocationFaultException { ExchangeHandlerProxy exchangeHandlerProxy = _exchangeHandlerProxy; ResponseCatcher responseCatcher = null; if (exchangeHandlerProxy == null) { responseCatcher = new ResponseCatcher(); exchangeHandlerProxy = createHandlerProxy(responseCatcher); } Exchange exchange = createExchange(ExchangePattern.IN_ONLY, exchangeHandlerProxy._exchangeHandlerProxy); Message message = exchange.createMessage().setContent(messagePayload); setProperties(exchange, message); addAttachments(message); exchange.send(message); if (exchange.getState().equals(ExchangeState.FAULT)) { throw new InvocationFaultException(exchange.getMessage()); } }
RemoteMessage createReplyMessage(Exchange exchange) { RemoteMessage reply = new RemoteMessage(); reply.setDomain(exchange.getProvider().getDomain().getName()) .setOperation(exchange.getContract().getConsumerOperation().getName()) .setService(exchange.getConsumer().getName()); exchange.getContext().mergeInto(reply.getContext()); if (exchange.getMessage() != null) { reply.setContent(exchange.getMessage().getContent()); } if (exchange.getState().equals(ExchangeState.FAULT)) { reply.setFault(true); } return reply; }
RemoteMessage createReplyMessage(Exchange exchange) { RemoteMessage reply = new RemoteMessage(); reply.setDomain(exchange.getProvider().getDomain().getName()) .setOperation(exchange.getContract().getConsumerOperation().getName()) .setService(exchange.getConsumer().getName()); exchange.getContext().mergeInto(reply.getContext()); if (exchange.getMessage() != null) { reply.setContent(exchange.getMessage().getContent()); } if (exchange.getState().equals(ExchangeState.FAULT)) { reply.setFault(true); } return reply; }