You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/03/15 10:51:09 UTC

[1/5] camel git commit: CAMEL-8488: Java DSL - Improved CBR to detect if endChoice vs end was invalid used

Repository: camel
Updated Branches:
  refs/heads/camel-2.15.x c75ca16d1 -> 78bcbf135
  refs/heads/master d41dda300 -> 7852d9906


CAMEL-8488: Java DSL - Improved CBR to detect if endChoice vs end was invalid used


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/da0acf65
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/da0acf65
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/da0acf65

Branch: refs/heads/master
Commit: da0acf6590a31241da2c446d8520d47a5f730328
Parents: d41dda3
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Mar 15 09:50:51 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 15 09:50:51 2015 +0100

----------------------------------------------------------------------
 .../apache/camel/model/ChoiceDefinition.java    |  30 ++++++
 .../issues/ChoiceEndOrEndChoiceIssueTest.java   | 105 +++++++++++++++++++
 2 files changed, 135 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/da0acf65/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index b2160de..a27502b 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -48,6 +48,8 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
     @XmlElement
     private OtherwiseDefinition otherwise;
 
+    private transient boolean onlyWhenOrOtherwise = true;
+
     public ChoiceDefinition() {
     }
     
@@ -138,6 +140,33 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
         return new ChoiceProcessor(filters, otherwiseProcessor);
     }
 
+    @Override
+    public void addOutput(ProcessorDefinition<?> output) {
+        if (onlyWhenOrOtherwise) {
+            if (output instanceof WhenDefinition || output instanceof OtherwiseDefinition) {
+                // okay we are adding a when or otherwise so allow any kind of output after this again
+                onlyWhenOrOtherwise = false;
+            } else {
+                throw new IllegalArgumentException("A new choice clause should start with a when() or otherwise(). If you intend to end the entire choice and are using endChoice() then use end() instead.");
+            }
+        }
+        super.addOutput(output);
+    }
+
+    @Override
+    public ProcessorDefinition<?> end() {
+        // we end a block so only when or otherwise is supported
+        onlyWhenOrOtherwise = true;
+        return super.end();
+    }
+
+    @Override
+    public ChoiceDefinition endChoice() {
+        // we end a block so only when or otherwise is supported
+        onlyWhenOrOtherwise = true;
+        return super.endChoice();
+    }
+
     // Fluent API
     // -------------------------------------------------------------------------
 
@@ -164,6 +193,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
     }
     
     private void addClause(ProcessorDefinition<?> when) {
+        onlyWhenOrOtherwise = true;
         popBlock();
         addOutput(when);
         pushBlock(when);

http://git-wip-us.apache.org/repos/asf/camel/blob/da0acf65/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
new file mode 100644
index 0000000..5566a8e
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
@@ -0,0 +1,105 @@
+/**
+ * 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.camel.issues;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+public class ChoiceEndOrEndChoiceIssueTest extends ContextTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    public void testEndChoiceInvalid() throws Exception {
+        try {
+            context.addRoutes(new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:start")
+                        .choice()
+                            .when(header("number").isEqualTo("one")).to("mock:one")
+                            .when(header("number").isEqualTo("two")).to("mock:two")
+                            .when(header("number").isEqualTo("three")).to("mock:three")
+                        .endChoice()
+                        .to("mock:finally");
+                }
+            });
+            context.start();
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("A new choice clause should start with a when() or otherwise()."
+                    + " If you intend to end the entire choice and are using endChoice() then use end() instead.", e.getMessage());
+        }
+    }
+
+    public void testEndChoiceValid() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .choice()
+                        .when(header("number").isEqualTo("one")).to("mock:one")
+                        .when(header("number").isEqualTo("two")).to("mock:two")
+                        .when(header("number").isEqualTo("three")).to("mock:three")
+                    .end()
+                    .to("mock:finally");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:one").expectedHeaderReceived("number", "one");
+        getMockEndpoint("mock:two").expectedHeaderReceived("number", "two");
+        getMockEndpoint("mock:three").expectedHeaderReceived("number", "three");
+        getMockEndpoint("mock:finally").expectedBodiesReceived("1", "2", "3");
+
+        template.sendBodyAndHeader("direct:start", "1", "number", "one");
+        template.sendBodyAndHeader("direct:start", "2", "number", "two");
+        template.sendBodyAndHeader("direct:start", "3", "number", "three");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testEndChoiceEndValid() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .choice()
+                        .when(header("number").isEqualTo("one")).to("mock:one")
+                        .when(header("number").isEqualTo("two")).to("mock:two")
+                        .when(header("number").isEqualTo("three")).to("mock:three")
+                    .endChoice().end()
+                    .to("mock:finally");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:one").expectedHeaderReceived("number", "one");
+        getMockEndpoint("mock:two").expectedHeaderReceived("number", "two");
+        getMockEndpoint("mock:three").expectedHeaderReceived("number", "three");
+        getMockEndpoint("mock:finally").expectedBodiesReceived("1", "2", "3");
+
+        template.sendBodyAndHeader("direct:start", "1", "number", "one");
+        template.sendBodyAndHeader("direct:start", "2", "number", "two");
+        template.sendBodyAndHeader("direct:start", "3", "number", "three");
+
+        assertMockEndpointsSatisfied();
+    }
+
+}


[2/5] camel git commit: Removed system out

Posted by da...@apache.org.
Removed system out


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/de613e9f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/de613e9f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/de613e9f

Branch: refs/heads/master
Commit: de613e9fc15c1441c1492680830db322b82ae372
Parents: da0acf6
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Mar 15 10:15:59 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 15 10:15:59 2015 +0100

----------------------------------------------------------------------
 .../org/apache/camel/spring/DumpModelAsXmlPlaceholdersTest.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/de613e9f/components/camel-spring/src/test/java/org/apache/camel/spring/DumpModelAsXmlPlaceholdersTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/DumpModelAsXmlPlaceholdersTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/DumpModelAsXmlPlaceholdersTest.java
index ba60b1a..4f533c1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/DumpModelAsXmlPlaceholdersTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/DumpModelAsXmlPlaceholdersTest.java
@@ -34,8 +34,8 @@ public class DumpModelAsXmlPlaceholdersTest extends SpringTestSupport {
         assertEquals("Gouda", context.getRoutes().get(0).getId());
         String xml = ModelHelper.dumpModelAsXml(context, context.getRouteDefinition("Gouda"));
         assertNotNull(xml);
-        System.out.println(xml);
         log.info(xml);
+
         assertTrue(xml.contains("<route customId=\"true\" id=\"Gouda\" xmlns=\"http://camel.apache.org/schema/spring\">"));
         assertTrue(xml.contains("<from uri=\"direct:start-{{cheese.type}}\"/>"));
         assertTrue(xml.contains("<to uri=\"direct:end-{{cheese.type}}\" customId=\"true\" id=\"log\"/>"));


[3/5] camel git commit: CAMEL-8489: camel-sjms - allow null body option.

Posted by da...@apache.org.
CAMEL-8489: camel-sjms - allow null body option.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7852d990
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7852d990
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7852d990

Branch: refs/heads/master
Commit: 7852d9906663fbe3c9227c551a790d04e6aac15a
Parents: de613e9
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Mar 15 10:51:51 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 15 10:51:51 2015 +0100

----------------------------------------------------------------------
 .../camel/component/sjms/SjmsEndpoint.java      | 10 +++
 .../component/sjms/jms/JmsMessageHelper.java    | 87 ++++++++++----------
 2 files changed, 55 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7852d990/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
index 5dbeb03..0ea668c 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
@@ -84,6 +84,8 @@ public class SjmsEndpoint extends DefaultEndpoint implements MultipleConsumersSu
     private boolean asyncStopListener;
     @UriParam(defaultValue = "true")
     private boolean prefillPool = true;
+    @UriParam(defaultValue = "true")
+    private boolean allowNullBody = true;
     @UriParam
     private TransactionCommitStrategy transactionCommitStrategy;
     @UriParam
@@ -504,4 +506,12 @@ public class SjmsEndpoint extends DefaultEndpoint implements MultipleConsumersSu
     public void setDestinationCreationStrategy(DestinationCreationStrategy destinationCreationStrategy) {
         this.destinationCreationStrategy = destinationCreationStrategy;
     }
+
+    public boolean isAllowNullBody() {
+        return allowNullBody;
+    }
+
+    public void setAllowNullBody(boolean allowNullBody) {
+        this.allowNullBody = allowNullBody;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/7852d990/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
index 062d143..81091d6 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
@@ -153,55 +153,58 @@ public final class JmsMessageHelper implements JmsConstants {
     }
 
     public static Message createMessage(Session session, Object payload, Map<String, Object> messageHeaders, SjmsEndpoint endpoint) throws Exception {
-        return createMessage(session, payload, messageHeaders, endpoint.getJmsKeyFormatStrategy(), endpoint.getCamelContext().getTypeConverter());
+        return createMessage(session, payload, messageHeaders, endpoint.isAllowNullBody(), endpoint.getJmsKeyFormatStrategy(), endpoint.getCamelContext().getTypeConverter());
     }
 
-    private static Message createMessage(Session session, Object payload, Map<String, Object> messageHeaders, KeyFormatStrategy keyFormatStrategy, TypeConverter typeConverter) throws Exception {
+    private static Message createMessage(Session session, Object payload, Map<String, Object> messageHeaders, boolean allowNullBody,
+                                         KeyFormatStrategy keyFormatStrategy, TypeConverter typeConverter) throws Exception {
         Message answer = null;
         JmsMessageType messageType = JmsMessageHelper.discoverMessageTypeFromPayload(payload);
-        try {
 
-            switch (messageType) {
-            case Bytes:
-                BytesMessage bytesMessage = session.createBytesMessage();
-                byte[] bytesToWrite = typeConverter.convertTo(byte[].class, payload);
-                bytesMessage.writeBytes(bytesToWrite);
-                answer = bytesMessage;
-                break;
-            case Map:
-                MapMessage mapMessage = session.createMapMessage();
-                Map objMap = (Map) payload;
-                for (final Map.Entry entry : (Set<Map.Entry>)objMap.entrySet()) {
-                    mapMessage.setObject(entry.getKey().toString(), entry.getValue());
-                }
-                answer = mapMessage;
-                break;
-            case Object:
-                ObjectMessage objectMessage = session.createObjectMessage();
-                objectMessage.setObject((Serializable) payload);
-                answer = objectMessage;
-                break;
-            case Text:
-                TextMessage textMessage = session.createTextMessage();
-                String convertedText = typeConverter.convertTo(String.class, payload);
-                textMessage.setText(convertedText);
-                answer = textMessage;
-                break;
-            case Stream:
-                StreamMessage streamMessage = session.createStreamMessage();
-                Collection collection = (Collection)payload;
-                for (final Object obj : collection) {
-                    streamMessage.writeObject(obj);
-                }
-                answer = streamMessage;
-                break;
-            default:
-                break;
+        switch (messageType) {
+        case Bytes:
+            BytesMessage bytesMessage = session.createBytesMessage();
+            byte[] bytesToWrite = typeConverter.convertTo(byte[].class, payload);
+            bytesMessage.writeBytes(bytesToWrite);
+            answer = bytesMessage;
+            break;
+        case Map:
+            MapMessage mapMessage = session.createMapMessage();
+            Map objMap = (Map) payload;
+            for (final Map.Entry entry : (Set<Map.Entry>)objMap.entrySet()) {
+                mapMessage.setObject(entry.getKey().toString(), entry.getValue());
             }
-        } catch (Exception e) {
-            LOGGER.error("Error creating a message of type: {}", messageType, e);
-            throw e;
+            answer = mapMessage;
+            break;
+        case Object:
+            ObjectMessage objectMessage = session.createObjectMessage();
+            objectMessage.setObject((Serializable) payload);
+            answer = objectMessage;
+            break;
+        case Text:
+            TextMessage textMessage = session.createTextMessage();
+            String convertedText = typeConverter.convertTo(String.class, payload);
+            textMessage.setText(convertedText);
+            answer = textMessage;
+            break;
+        case Stream:
+            StreamMessage streamMessage = session.createStreamMessage();
+            Collection collection = (Collection)payload;
+            for (final Object obj : collection) {
+                streamMessage.writeObject(obj);
+            }
+            answer = streamMessage;
+            break;
+        case Message:
+            if (allowNullBody && payload == null) {
+                answer = session.createMessage();
+            } else {
+                throw new JMSException("Null body is not allowed");
+            }
+        default:
+            break;
         }
+
         if (messageHeaders != null && !messageHeaders.isEmpty()) {
             answer = JmsMessageHelper.setJmsMessageHeaders(answer, messageHeaders, keyFormatStrategy);
         }


[4/5] camel git commit: CAMEL-8488: Java DSL - Improved CBR to detect if endChoice vs end was invalid used

Posted by da...@apache.org.
CAMEL-8488: Java DSL - Improved CBR to detect if endChoice vs end was invalid used


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5c286b32
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5c286b32
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5c286b32

Branch: refs/heads/camel-2.15.x
Commit: 5c286b322fc910ebf4a53f9f7a2b8f5b7c505d3a
Parents: c75ca16
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Mar 15 09:50:51 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 15 10:52:11 2015 +0100

----------------------------------------------------------------------
 .../apache/camel/model/ChoiceDefinition.java    |  30 ++++++
 .../issues/ChoiceEndOrEndChoiceIssueTest.java   | 105 +++++++++++++++++++
 2 files changed, 135 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5c286b32/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index b2160de..a27502b 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -48,6 +48,8 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
     @XmlElement
     private OtherwiseDefinition otherwise;
 
+    private transient boolean onlyWhenOrOtherwise = true;
+
     public ChoiceDefinition() {
     }
     
@@ -138,6 +140,33 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
         return new ChoiceProcessor(filters, otherwiseProcessor);
     }
 
+    @Override
+    public void addOutput(ProcessorDefinition<?> output) {
+        if (onlyWhenOrOtherwise) {
+            if (output instanceof WhenDefinition || output instanceof OtherwiseDefinition) {
+                // okay we are adding a when or otherwise so allow any kind of output after this again
+                onlyWhenOrOtherwise = false;
+            } else {
+                throw new IllegalArgumentException("A new choice clause should start with a when() or otherwise(). If you intend to end the entire choice and are using endChoice() then use end() instead.");
+            }
+        }
+        super.addOutput(output);
+    }
+
+    @Override
+    public ProcessorDefinition<?> end() {
+        // we end a block so only when or otherwise is supported
+        onlyWhenOrOtherwise = true;
+        return super.end();
+    }
+
+    @Override
+    public ChoiceDefinition endChoice() {
+        // we end a block so only when or otherwise is supported
+        onlyWhenOrOtherwise = true;
+        return super.endChoice();
+    }
+
     // Fluent API
     // -------------------------------------------------------------------------
 
@@ -164,6 +193,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
     }
     
     private void addClause(ProcessorDefinition<?> when) {
+        onlyWhenOrOtherwise = true;
         popBlock();
         addOutput(when);
         pushBlock(when);

http://git-wip-us.apache.org/repos/asf/camel/blob/5c286b32/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
new file mode 100644
index 0000000..5566a8e
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
@@ -0,0 +1,105 @@
+/**
+ * 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.camel.issues;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+public class ChoiceEndOrEndChoiceIssueTest extends ContextTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    public void testEndChoiceInvalid() throws Exception {
+        try {
+            context.addRoutes(new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:start")
+                        .choice()
+                            .when(header("number").isEqualTo("one")).to("mock:one")
+                            .when(header("number").isEqualTo("two")).to("mock:two")
+                            .when(header("number").isEqualTo("three")).to("mock:three")
+                        .endChoice()
+                        .to("mock:finally");
+                }
+            });
+            context.start();
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("A new choice clause should start with a when() or otherwise()."
+                    + " If you intend to end the entire choice and are using endChoice() then use end() instead.", e.getMessage());
+        }
+    }
+
+    public void testEndChoiceValid() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .choice()
+                        .when(header("number").isEqualTo("one")).to("mock:one")
+                        .when(header("number").isEqualTo("two")).to("mock:two")
+                        .when(header("number").isEqualTo("three")).to("mock:three")
+                    .end()
+                    .to("mock:finally");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:one").expectedHeaderReceived("number", "one");
+        getMockEndpoint("mock:two").expectedHeaderReceived("number", "two");
+        getMockEndpoint("mock:three").expectedHeaderReceived("number", "three");
+        getMockEndpoint("mock:finally").expectedBodiesReceived("1", "2", "3");
+
+        template.sendBodyAndHeader("direct:start", "1", "number", "one");
+        template.sendBodyAndHeader("direct:start", "2", "number", "two");
+        template.sendBodyAndHeader("direct:start", "3", "number", "three");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testEndChoiceEndValid() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .choice()
+                        .when(header("number").isEqualTo("one")).to("mock:one")
+                        .when(header("number").isEqualTo("two")).to("mock:two")
+                        .when(header("number").isEqualTo("three")).to("mock:three")
+                    .endChoice().end()
+                    .to("mock:finally");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:one").expectedHeaderReceived("number", "one");
+        getMockEndpoint("mock:two").expectedHeaderReceived("number", "two");
+        getMockEndpoint("mock:three").expectedHeaderReceived("number", "three");
+        getMockEndpoint("mock:finally").expectedBodiesReceived("1", "2", "3");
+
+        template.sendBodyAndHeader("direct:start", "1", "number", "one");
+        template.sendBodyAndHeader("direct:start", "2", "number", "two");
+        template.sendBodyAndHeader("direct:start", "3", "number", "three");
+
+        assertMockEndpointsSatisfied();
+    }
+
+}


[5/5] camel git commit: CAMEL-8489: camel-sjms - allow null body option.

Posted by da...@apache.org.
CAMEL-8489: camel-sjms - allow null body option.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/78bcbf13
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/78bcbf13
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/78bcbf13

Branch: refs/heads/camel-2.15.x
Commit: 78bcbf135414c703d9c0fdb1b162888e85a00e4c
Parents: 5c286b3
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Mar 15 10:51:51 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 15 10:52:19 2015 +0100

----------------------------------------------------------------------
 .../camel/component/sjms/SjmsEndpoint.java      | 10 +++
 .../component/sjms/jms/JmsMessageHelper.java    | 87 ++++++++++----------
 2 files changed, 55 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/78bcbf13/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
index 5dbeb03..0ea668c 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
@@ -84,6 +84,8 @@ public class SjmsEndpoint extends DefaultEndpoint implements MultipleConsumersSu
     private boolean asyncStopListener;
     @UriParam(defaultValue = "true")
     private boolean prefillPool = true;
+    @UriParam(defaultValue = "true")
+    private boolean allowNullBody = true;
     @UriParam
     private TransactionCommitStrategy transactionCommitStrategy;
     @UriParam
@@ -504,4 +506,12 @@ public class SjmsEndpoint extends DefaultEndpoint implements MultipleConsumersSu
     public void setDestinationCreationStrategy(DestinationCreationStrategy destinationCreationStrategy) {
         this.destinationCreationStrategy = destinationCreationStrategy;
     }
+
+    public boolean isAllowNullBody() {
+        return allowNullBody;
+    }
+
+    public void setAllowNullBody(boolean allowNullBody) {
+        this.allowNullBody = allowNullBody;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/78bcbf13/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
index 062d143..81091d6 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
@@ -153,55 +153,58 @@ public final class JmsMessageHelper implements JmsConstants {
     }
 
     public static Message createMessage(Session session, Object payload, Map<String, Object> messageHeaders, SjmsEndpoint endpoint) throws Exception {
-        return createMessage(session, payload, messageHeaders, endpoint.getJmsKeyFormatStrategy(), endpoint.getCamelContext().getTypeConverter());
+        return createMessage(session, payload, messageHeaders, endpoint.isAllowNullBody(), endpoint.getJmsKeyFormatStrategy(), endpoint.getCamelContext().getTypeConverter());
     }
 
-    private static Message createMessage(Session session, Object payload, Map<String, Object> messageHeaders, KeyFormatStrategy keyFormatStrategy, TypeConverter typeConverter) throws Exception {
+    private static Message createMessage(Session session, Object payload, Map<String, Object> messageHeaders, boolean allowNullBody,
+                                         KeyFormatStrategy keyFormatStrategy, TypeConverter typeConverter) throws Exception {
         Message answer = null;
         JmsMessageType messageType = JmsMessageHelper.discoverMessageTypeFromPayload(payload);
-        try {
 
-            switch (messageType) {
-            case Bytes:
-                BytesMessage bytesMessage = session.createBytesMessage();
-                byte[] bytesToWrite = typeConverter.convertTo(byte[].class, payload);
-                bytesMessage.writeBytes(bytesToWrite);
-                answer = bytesMessage;
-                break;
-            case Map:
-                MapMessage mapMessage = session.createMapMessage();
-                Map objMap = (Map) payload;
-                for (final Map.Entry entry : (Set<Map.Entry>)objMap.entrySet()) {
-                    mapMessage.setObject(entry.getKey().toString(), entry.getValue());
-                }
-                answer = mapMessage;
-                break;
-            case Object:
-                ObjectMessage objectMessage = session.createObjectMessage();
-                objectMessage.setObject((Serializable) payload);
-                answer = objectMessage;
-                break;
-            case Text:
-                TextMessage textMessage = session.createTextMessage();
-                String convertedText = typeConverter.convertTo(String.class, payload);
-                textMessage.setText(convertedText);
-                answer = textMessage;
-                break;
-            case Stream:
-                StreamMessage streamMessage = session.createStreamMessage();
-                Collection collection = (Collection)payload;
-                for (final Object obj : collection) {
-                    streamMessage.writeObject(obj);
-                }
-                answer = streamMessage;
-                break;
-            default:
-                break;
+        switch (messageType) {
+        case Bytes:
+            BytesMessage bytesMessage = session.createBytesMessage();
+            byte[] bytesToWrite = typeConverter.convertTo(byte[].class, payload);
+            bytesMessage.writeBytes(bytesToWrite);
+            answer = bytesMessage;
+            break;
+        case Map:
+            MapMessage mapMessage = session.createMapMessage();
+            Map objMap = (Map) payload;
+            for (final Map.Entry entry : (Set<Map.Entry>)objMap.entrySet()) {
+                mapMessage.setObject(entry.getKey().toString(), entry.getValue());
             }
-        } catch (Exception e) {
-            LOGGER.error("Error creating a message of type: {}", messageType, e);
-            throw e;
+            answer = mapMessage;
+            break;
+        case Object:
+            ObjectMessage objectMessage = session.createObjectMessage();
+            objectMessage.setObject((Serializable) payload);
+            answer = objectMessage;
+            break;
+        case Text:
+            TextMessage textMessage = session.createTextMessage();
+            String convertedText = typeConverter.convertTo(String.class, payload);
+            textMessage.setText(convertedText);
+            answer = textMessage;
+            break;
+        case Stream:
+            StreamMessage streamMessage = session.createStreamMessage();
+            Collection collection = (Collection)payload;
+            for (final Object obj : collection) {
+                streamMessage.writeObject(obj);
+            }
+            answer = streamMessage;
+            break;
+        case Message:
+            if (allowNullBody && payload == null) {
+                answer = session.createMessage();
+            } else {
+                throw new JMSException("Null body is not allowed");
+            }
+        default:
+            break;
         }
+
         if (messageHeaders != null && !messageHeaders.isEmpty()) {
             answer = JmsMessageHelper.setJmsMessageHeaders(answer, messageHeaders, keyFormatStrategy);
         }