You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/05/28 10:37:22 UTC
svn commit: r660859 - in
/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src:
main/java/org/apache/servicemix/camel/ test/java/org/apache/servicemix/camel/
test/resources/org/apache/servicemix/camel/su5-src/
Author: gnodet
Date: Wed May 28 01:37:22 2008
New Revision: 660859
URL: http://svn.apache.org/viewvc?rev=660859&view=rev
Log:
SM-1373: Camel component does not forward out message correctly when used in a pipeline
Modified:
servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/JbiExchange.java
servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/JbiInOutTest.java
servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/MyEchoComponent.java
servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/NonJbiCamelEndpointsIntegrationTest.java
servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/resources/org/apache/servicemix/camel/su5-src/camel-context.xml
Modified: servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java?rev=660859&r1=660858&r2=660859&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java (original)
+++ servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java Wed May 28 01:37:22 2008
@@ -16,14 +16,17 @@
*/
package org.apache.servicemix.camel;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.MessageExchange;
-import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.messaging.RobustInOnly;
import javax.xml.namespace.QName;
import org.apache.camel.Endpoint;
import org.apache.camel.Processor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.JbiConstants;
import org.apache.servicemix.common.ServiceUnit;
import org.apache.servicemix.common.endpoints.ProviderEndpoint;
@@ -56,20 +59,57 @@
}
@Override
- protected void processInOnly(MessageExchange exchange, NormalizedMessage in) throws Exception {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Received exchange: " + exchange);
+ public void process(MessageExchange exchange) throws Exception {
+ // The component acts as a provider, this means that another component has requested our service
+ // As this exchange is active, this is either an in or a fault (out are sent by this component)
+ if (exchange.getRole() == MessageExchange.Role.PROVIDER) {
+ // Exchange is finished
+ if (exchange.getStatus() == ExchangeStatus.DONE) {
+ return;
+ // Exchange has been aborted with an exception
+ } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+ return;
+ // Exchange is active
+ } else {
+ handleActiveProviderExchange(exchange);
+
+ }
+ // Unsupported role: this should never happen has we never create exchanges
+ } else {
+ throw new IllegalStateException("Unsupported role: " + exchange.getRole());
}
- JbiExchange camelExchange = new JbiExchange(camelEndpoint.getContext(), binding, exchange);
- camelProcessor.process(camelExchange);
}
- @Override
- protected void processInOut(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws Exception {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Received exchange: " + exchange);
+ protected void handleActiveProviderExchange(MessageExchange exchange) throws Exception {
+ // Fault message
+ if (exchange.getFault() != null) {
+ done(exchange);
+ // In message
+ } else if (exchange.getMessage("in") != null) {
+ if (exchange instanceof InOnly || exchange instanceof RobustInOnly) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Received exchange: " + exchange);
+ }
+ JbiExchange camelExchange = new JbiExchange(camelEndpoint.getContext(), binding, exchange);
+ camelProcessor.process(camelExchange);
+ done(exchange);
+ } else {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Received exchange: " + exchange);
+ }
+ JbiExchange camelExchange = new JbiExchange(camelEndpoint.getContext(), binding, exchange);
+ camelProcessor.process(camelExchange);
+ boolean txSync = exchange.isTransacted() && Boolean.TRUE.equals(exchange.getProperty(JbiConstants.SEND_SYNC));
+ if (txSync) {
+ sendSync(exchange);
+ } else {
+ send(exchange);
+ }
+ }
+ // This is not compliant with the default MEPs
+ } else {
+ throw new IllegalStateException("Provider exchange is ACTIVE, but no in or fault is provided");
}
- JbiExchange camelExchange = new JbiExchange(camelEndpoint.getContext(), binding, exchange);
- camelProcessor.process(camelExchange);
}
+
}
Modified: servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/JbiExchange.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/JbiExchange.java?rev=660859&r1=660858&r2=660859&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/JbiExchange.java (original)
+++ servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/JbiExchange.java Wed May 28 01:37:22 2008
@@ -16,6 +16,7 @@
*/
package org.apache.servicemix.camel;
+import javax.jbi.JBIException;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
@@ -49,11 +50,6 @@
this.messageExchange = messageExchange;
setPattern(ExchangePattern.fromWsdlUri(messageExchange.getPattern().toString()));
- // TODO we could maybe use the typesafe APIs of different derived APIs
- // from JBI
- setIn(new JbiMessage(messageExchange.getMessage("in")));
- setOut(new JbiMessage(messageExchange.getMessage("out")));
- setFault(new JbiMessage(messageExchange.getMessage("fault")));
populateProperties();
}
@@ -139,17 +135,34 @@
@Override
protected JbiMessage createInMessage() {
- return new JbiMessage();
+ return createMessage("in");
}
@Override
protected JbiMessage createOutMessage() {
- return new JbiMessage();
+ return createMessage("out");
}
@Override
protected JbiMessage createFaultMessage() {
- return new JbiMessage();
+ return createMessage("fault");
+ }
+
+ private JbiMessage createMessage(String name) {
+ if (messageExchange != null) {
+ try {
+ NormalizedMessage msg = messageExchange.getMessage(name);
+ if (msg == null) {
+ msg = messageExchange.createMessage();
+ messageExchange.setMessage(msg, name);
+ }
+ return new JbiMessage(msg);
+ } catch (JBIException e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ return new JbiMessage();
+ }
}
private void populateProperties() {
Modified: servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/JbiInOutTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/JbiInOutTest.java?rev=660859&r1=660858&r2=660859&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/JbiInOutTest.java (original)
+++ servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/JbiInOutTest.java Wed May 28 01:37:22 2008
@@ -49,4 +49,11 @@
assertNotNull("Should have a Camel endpoint exposed in JBI!", endpoint);
exchange.setEndpoint(endpoint);
}
+
+ @Override
+ protected void checkResult(MessageExchange exchange) {
+ assertNotNull(exchange.getMessage("out"));
+ assertNotNull(exchange.getMessage("out").getContent());
+ }
+
}
Modified: servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/MyEchoComponent.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/MyEchoComponent.java?rev=660859&r1=660858&r2=660859&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/MyEchoComponent.java (original)
+++ servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/MyEchoComponent.java Wed May 28 01:37:22 2008
@@ -21,10 +21,13 @@
import javax.jbi.messaging.NormalizedMessage;
import javax.xml.namespace.QName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.servicemix.components.util.EchoComponent;
public class MyEchoComponent extends EchoComponent {
+ private static final Log LOG = LogFactory.getLog(MyEchoComponent.class);
public MyEchoComponent() {
}
@@ -34,10 +37,12 @@
}
protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws MessagingException {
+ getMessageTransformer().transform(exchange, in, out);
// Put the operation information back to the out message
if (exchange.getOperation() != null) {
out.setProperty("operation", exchange.getOperation());
}
+ LOG.info("Echoed back message: " + out);
return true;
}
Modified: servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/NonJbiCamelEndpointsIntegrationTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/NonJbiCamelEndpointsIntegrationTest.java?rev=660859&r1=660858&r2=660859&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/NonJbiCamelEndpointsIntegrationTest.java (original)
+++ servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/java/org/apache/servicemix/camel/NonJbiCamelEndpointsIntegrationTest.java Wed May 28 01:37:22 2008
@@ -104,7 +104,6 @@
}
protected void checkResult(MessageExchange exchange) {
- assertNotNull(exchange.getMessage("out"));
}
/*
Modified: servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/resources/org/apache/servicemix/camel/su5-src/camel-context.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/resources/org/apache/servicemix/camel/su5-src/camel-context.xml?rev=660859&r1=660858&r2=660859&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/resources/org/apache/servicemix/camel/su5-src/camel-context.xml (original)
+++ servicemix/smx3/trunk/deployables/serviceengines/servicemix-camel/src/test/resources/org/apache/servicemix/camel/su5-src/camel-context.xml Wed May 28 01:37:22 2008
@@ -28,6 +28,7 @@
<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
<route>
<from uri="jbi:name:cheese"/>
+ <to uri="log:Su5Log" />
<to uri="jbi:service:namespace:echo?mep=in-out"/>
</route>
</camelContext>