You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ge...@apache.org on 2010/10/25 11:43:48 UTC
svn commit: r1027009 - in
/servicemix/components/engines/servicemix-camel/trunk/src:
main/java/org/apache/servicemix/camel/ test/java/org/apache/servicemix/camel/
Author: gertv
Date: Mon Oct 25 09:43:48 2010
New Revision: 1027009
URL: http://svn.apache.org/viewvc?rev=1027009&view=rev
Log:
SMXCOMP-811: Properties of the MessageExchange aren't propagated to Camel Exchange (Thx to Hans Couder for providing the patch)r
Added:
servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiExchangePropertiesPreservationTest.java
Modified:
servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelConsumerEndpoint.java
servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiBinding.java
servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiBindingTest.java
Modified: servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelConsumerEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelConsumerEndpoint.java?rev=1027009&r1=1027008&r2=1027009&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelConsumerEndpoint.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelConsumerEndpoint.java Mon Oct 25 09:43:48 2010
@@ -142,7 +142,7 @@ public class CamelConsumerEndpoint exten
exchange.setException(messageExchange.getError());
} else if (messageExchange.getStatus() == ExchangeStatus.ACTIVE) {
// first copy the exchange headers
- binding.copyHeadersFromJbiToCamel(messageExchange, exchange);
+ binding.copyPropertiesFromJbiToCamel(messageExchange, exchange);
// then copy the out/fault message
if (messageExchange.getFault() != null) {
binding.copyFromJbiToCamel(messageExchange.getMessage("fault"), exchange.getOut());
Modified: servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiBinding.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiBinding.java?rev=1027009&r1=1027008&r2=1027009&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiBinding.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiBinding.java Mon Oct 25 09:43:48 2010
@@ -126,7 +126,7 @@ public class JbiBinding {
MessageExchange jbiExchange = createJbiMessageExchange(camelExchange, exchangeFactory, defaultMep);
- copyHeadersFromCamelToJbi(camelExchange, jbiExchange);
+ copyPropertiesFromCamelToJbi(camelExchange, jbiExchange);
NormalizedMessage normalizedMessage = jbiExchange.getMessage("in");
if (normalizedMessage == null) {
@@ -165,7 +165,6 @@ public class JbiBinding {
if (getOperation(camelExchange) != null) {
answer.setOperation(getOperation(camelExchange));
}
-
return answer;
}
@@ -179,6 +178,7 @@ public class JbiBinding {
if (exchange.getMessage("in") != null) {
copyFromJbiToCamel(exchange.getMessage("in"), result.getIn());
}
+ copyPropertiesFromJbiToCamel(exchange, result);
return result;
}
@@ -197,14 +197,14 @@ public class JbiBinding {
}
}
- /**
- * Copies headers from the JBI MessageExchange to the Camel Exchange, taking into account the
+ /**
+ * Copies properties from the JBI MessageExchange to the Camel Exchange, taking into account the
* {@link HeaderFilterStrategy} that has been configured on this binding.
*
* @param from the JBI MessageExchange
* @param to the Camel Exchange
*/
- public void copyHeadersFromJbiToCamel(MessageExchange from, Exchange to) {
+ public void copyPropertiesFromJbiToCamel(MessageExchange from, Exchange to) {
for (Object object : from.getPropertyNames()) {
String key = object.toString();
if (!strategies.applyFilterToCamelHeaders(key, from.getProperty(key), null)) {
@@ -263,7 +263,7 @@ public class JbiBinding {
public void copyFromCamelToJbi(Exchange exchange, MessageExchange messageExchange) throws MessagingException {
// add Exchange properties to the MessageExchange without overwriting any existing properties
- copyHeadersFromCamelToJbi(exchange, messageExchange);
+ copyPropertiesFromCamelToJbi(exchange, messageExchange);
NormalizedMessage in = messageExchange.getMessage("in");
for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) {
@@ -298,7 +298,7 @@ public class JbiBinding {
return e;
}
- private void copyHeadersFromCamelToJbi(Exchange exchange, MessageExchange messageExchange) {
+ private void copyPropertiesFromCamelToJbi(Exchange exchange, MessageExchange messageExchange) {
for (String key : exchange.getProperties().keySet()) {
if (messageExchange.getProperty(key) == null) {
Object value = exchange.getProperty(key);
Modified: servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiBindingTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiBindingTest.java?rev=1027009&r1=1027008&r2=1027009&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiBindingTest.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiBindingTest.java Mon Oct 25 09:43:48 2010
@@ -78,13 +78,15 @@ public class JbiBindingTest extends Test
public void testCreateExchange() throws Exception {
MessageExchange me = factory.createRobustInOnlyExchange();
-
+ me.setProperty(KEY, VALUE);
Exchange exchange = binding.createExchange(me);
assertNotNull(exchange);
assertSame("JBI MessageExchange is available as a property",
me, exchange.getProperty(JbiBinding.MESSAGE_EXCHANGE));
assertEquals("Camel Exchange uses the same MEP",
ExchangePattern.RobustInOnly, exchange.getPattern());
+ assertEquals("JBI Exchange properties are available in the Camel Exchange",
+ VALUE, exchange.getProperties().get(KEY));
}
public void testCreateExchangeWithInContentAndHeaders() throws Exception {
@@ -233,13 +235,13 @@ public class JbiBindingTest extends Test
"another-value", me.getProperty("another-key"));
}
- public void testCopyHeadersFromJbiToCamel() throws Exception {
+ public void testCopyPropertiesFromJbiToCamel() throws Exception {
MessageExchange me = new MockMessageExchange();
me.setProperty(KEY, VALUE);
me.setProperty(FILTERED_KEY, FILTERED_VALUE);
Exchange exchange = new DefaultExchange(new DefaultCamelContext());
- binding.copyHeadersFromJbiToCamel(me, exchange);
+ binding.copyPropertiesFromJbiToCamel(me, exchange);
assertEquals("Should copy header properties into the Camel Exchange",
VALUE, exchange.getProperty(KEY));
Added: servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiExchangePropertiesPreservationTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiExchangePropertiesPreservationTest.java?rev=1027009&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiExchangePropertiesPreservationTest.java (added)
+++ servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiExchangePropertiesPreservationTest.java Mon Oct 25 09:43:48 2010
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.TestSupport;
+import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.client.ServiceMixClient;
+import org.apache.servicemix.jbi.container.ActivationSpec;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+
+import javax.jbi.JBIException;
+import javax.jbi.messaging.InOnly;
+import javax.xml.namespace.QName;
+import java.util.List;
+
+/**
+ * Test case to ensure JBI MessageExchange properties are being preserved when routing through Camel
+ */
+public class JbiExchangePropertiesPreservationTest extends JbiTestSupport {
+
+ private static final String KEY = "key";
+ private static final String NEW_KEY = "newkey";
+ private static final Object VALUE = "value";
+ private static final Object NEW_VALUE = "newvalue";
+ private static final String MESSAGE = "<just><a>test</a></just>";
+
+ public void testPropertyPreservation() throws JBIException, InterruptedException {
+ MockEndpoint output = getMockEndpoint("mock:output");
+ output.expectedMessageCount(1);
+
+ ServiceMixClient client = new DefaultServiceMixClient(jbiContainer);
+ InOnly exchange = client.createInOnlyExchange();
+ exchange.getInMessage().setContent(new StringSource(MESSAGE));
+ exchange.setService(new QName("urn:test", "input"));
+ exchange.setProperty(KEY,VALUE);
+ client.send(exchange);
+
+ output.assertIsSatisfied();
+
+ assertEquals("Existing JBI Exchange property value has not been altered",
+ VALUE, exchange.getProperty(KEY));
+ assertEquals("New JBI Exchange property has been added",
+ VALUE, exchange.getProperty(NEW_KEY));
+
+ }
+
+ @Override
+ protected void appendJbiActivationSpecs(List<ActivationSpec> activationSpecList) {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ protected RouteBuilder createRoutes() {
+ return new RouteBuilder() {
+
+ @Override
+ public void configure() throws Exception {
+
+ from("jbi:service:urn:test:input")
+ .to("jbi:service:urn:test:transformer?mep=in-out")
+ .to("mock:output");
+
+ from("jbi:service:urn:test:transformer").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ if (exchange.getProperties().containsKey(KEY)) {
+ exchange.setProperty(KEY, NEW_VALUE);
+ } else {
+ throw new RuntimeException("Expected exchange property is missing");
+ }
+ exchange.setProperty(NEW_KEY,VALUE);
+ }
+ });
+ }
+ };
+ }
+
+}