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