@Override public void handleMessage(final Exchange exchange) throws HandlerException { _messages.offer(exchange); if (_behavior == null || exchange.getContract().getProviderOperation().getExchangePattern().equals(ExchangePattern.IN_ONLY)) { return; } switch (_behavior) { case FORWARD_IN_TO_OUT : exchange.send(exchange.getMessage().copy()); break; case FORWARD_IN_TO_FAULT : exchange.sendFault(exchange.getMessage().copy()); break; case REPLY_WITH_OUT : exchange.send(exchange.createMessage().setContent(_replyContent)); break; case REPLY_WITH_FAULT : exchange.sendFault(exchange.createMessage().setContent(_replyContent)); break; } }
/** * Gets an Object context property. * @param exchange the exchange * @param message the message * @param name the name * @return the property */ protected Object getObject(Exchange exchange, Message message, String name) { Context context = message != null ? exchange.getContext(message) : exchange.getContext(); return context.getPropertyValue(name); }
@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 QName getTargetServiceName(Exchange exchange) { // Figure out the QName for the service were invoking. QName service = exchange.getProvider().getName(); // Overriding target service name if it's specified in context property. String targetName = exchange.getContext().getPropertyValue(CONTEXT_PROPERTY_PREFIX + KEY_TARGET_SERVICE); if (targetName == null) { targetName = _targetService != null ? _targetService : service.getLocalPart(); } String targetNS = exchange.getContext().getPropertyValue(CONTEXT_PROPERTY_PREFIX + KEY_TARGET_NAMESPACE); if (targetNS == null) { targetNS = _targetNamespace != null ? _targetNamespace : service.getNamespaceURI(); } return new QName(targetNS, targetName); }
@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); } } } }
private void invokeLocal(Exchange exchange, ServiceReference targetRef) throws HandlerException { SynchronousInOutHandler replyHandler = new SynchronousInOutHandler(); Exchange ex = targetRef.createExchange(exchange.getContract().getProviderOperation().getName(), replyHandler); Message invokeMsg = exchange.getMessage().copy(); exchange.getContext().mergeInto(invokeMsg.getContext()); targetRef.getDomain().getProperty(Deployment.CLASSLOADER_PROPERTY); origCL = Classes.setTCCL(targetCL); ex.send(invokeMsg); } finally { if (origCL != null) { if (ExchangePattern.IN_OUT.equals(ex.getPattern())) { replyHandler.waitForOut(); if (ex.getMessage() != null) { Message replyMsg = ex.getMessage().copy(); ex.getContext().mergeInto(replyMsg.getContext()); if (ExchangeState.FAULT.equals(ex.getState())) { exchange.sendFault(replyMsg); } else { exchange.send(replyMsg); } else if (ExchangeState.FAULT.equals(ex.getState())) { throw createHandlerException(ex.getMessage());
private void invokeRemote(Exchange exchange, QName serviceName) throws HandlerException { .setDomain(exchange.getProvider().getDomain().getName()) .setService(serviceName) .setOperation(exchange.getContract().getConsumerOperation().getName()) .setContent(exchange.getMessage().getContent()); exchange.getContext().mergeInto(request.getContext()); boolean transactionPropagated = bridgeOutgoingTransaction(request); if (ExchangePattern.IN_OUT.equals(exchange.getPattern())) { Message msg = exchange.createMessage(); msg.setContent(reply.getContent()); Context replyCtx = reply.getContext(); if (replyCtx != null) { replyCtx.mergeInto(exchange.getContext()); exchange.sendFault(msg); } else { exchange.send(msg); exchange.sendFault(exchange.createMessage().setContent(ioEx));
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; }
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(); }
/** * {@inheritDoc} */ @Override public CamelBindingData decompose(Exchange exchange, CamelBindingData target) throws Exception { Message sourceMessage = exchange.getMessage(); getContextMapper().mapTo(exchange.getContext(), target); org.apache.camel.Message targetMessage = target.getMessage(); if (!sourceMessage.getAttachmentMap().isEmpty()) { for (Entry<String, DataSource> entry : sourceMessage.getAttachmentMap().entrySet()) { targetMessage.addAttachment(entry.getKey(), new DataHandler(entry.getValue())); } } ServiceOperation operation = exchange.getContract().getProviderOperation(); target.getMessage().getExchange().setProperty(OPERATION_NAME, operation.getName()); target.getMessage().getExchange().setProperty(FAULT_TYPE, operation.getFaultType()); target.getMessage().getExchange().setProperty(SERVICE_NAME, exchange.getProvider().getName()); targetMessage.setBody(sourceMessage.getContent()); return target; } }
private void initInTransformSequence(Exchange exchange) { QName exchangeInputType = exchange.getContract().getConsumerOperation().getInputType(); QName serviceOperationInputType = exchange.getContract().getProviderOperation().getInputType(); if (exchangeInputType != null && serviceOperationInputType != null) { TransformSequence. from(exchangeInputType). to(serviceOperationInputType). associateWith(exchange.getMessage()); } }
/** * {@inheritDoc} */ @Override public HttpBindingData decompose(Exchange exchange, HttpBindingData target) throws Exception { Object content = exchange.getMessage().getContent(); if ((content instanceof String) && (content.equals(""))) { exchange.getContext().setProperty(HttpContextMapper.HTTP_RESPONSE_STATUS, 404).addLabels(new String[]{EndpointLabel.HTTP.label()}); } target = super.decompose(exchange, target); return target; }
@Test public void testPhaseIsInAfterInputMessage() { ServiceReference service = _domain.createInOnlyService(new QName("InPhase")); Exchange exchange = service.createExchange(); exchange.send(exchange.createMessage()); Assert.assertEquals(ExchangePhase.IN, exchange.getPhase()); }
@Test public void testMessageIdSetOnSend() { ServiceReference service = _domain.createInOnlyService(new QName("IdTest")); Exchange exchange = service.createExchange(); exchange.send(exchange.createMessage()); Assert.assertNotNull(exchange.getMessage().getContext().getProperty(Exchange.MESSAGE_ID)); }
/** * {@inheritDoc} */ @Override public org.switchyard.Message compose(IndexedRecordBindingData source, Exchange exchange) throws Exception { final org.switchyard.Message message = exchange.createMessage(); getContextMapper().mapFrom(source, exchange.getContext(message)); List<Object> l = new ArrayList<Object>(); l.addAll(source.getRecord()); message.setContent(l); return message; }
@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); } }
@Test public void testInMessageTrace() { ServiceReference service = _domain.createInOnlyService(new QName("InTrace")); Exchange exchange = service.createExchange(); exchange.send(exchange.createMessage()); }
@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()); }
@Override public ExchangeContract getContract() { return getExchange().getContract(); }
@Override public void handleFault(Exchange exchange) { _isFault = true; _response = exchange.getMessage(); } }