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);
+                     }
+                });
+            }
+        };
+    }
+    
+}