Repository: camel Updated Branches: refs/heads/master 9e9e69e54 -> e3b31428c
Camel-8024 Improvement to camel-sjms JMSMessageHelper Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3cf9f7be Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3cf9f7be Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3cf9f7be Branch: refs/heads/master Commit: 3cf9f7be2cf52509964b8ff015ab46b9741b2606 Parents: 9e9e69e Author: ancosen <anco...@gmail.com> Authored: Sun Nov 9 13:08:47 2014 +0100 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Tue Nov 11 20:32:11 2014 +0800 ---------------------------------------------------------------------- .../component/sjms/jms/JmsMessageHelper.java | 23 ++- .../JMSMessageHelperTypeConversionTest.java | 161 +++++++++++++++++++ 2 files changed, 181 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/3cf9f7be/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 176c776..5934966 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 @@ -17,8 +17,12 @@ package org.apache.camel.component.sjms.jms; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.InputStream; +import java.io.Reader; import java.io.Serializable; +import java.nio.ByteBuffer; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -97,7 +101,9 @@ public final class JmsMessageHelper { switch (messageType) { case Bytes: - BytesMessage bytesMessage = typeConverter.convertTo(BytesMessage.class, payload); + BytesMessage bytesMessage = session.createBytesMessage(); + byte[] bytesToWrite = typeConverter.convertTo(byte[].class, payload); + bytesMessage.writeBytes(bytesToWrite); answer = bytesMessage; break; case Map: @@ -117,7 +123,8 @@ public final class JmsMessageHelper { break; case Text: TextMessage textMessage = session.createTextMessage(); - textMessage.setText((String) payload); + String convertedText = typeConverter.convertTo(String.class, payload); + textMessage.setText(convertedText); answer = textMessage; break; case Stream: @@ -378,9 +385,19 @@ public final class JmsMessageHelper { } else if (Collection.class.isInstance(payload)) { answer = JmsMessageType.Map; } else if (InputStream.class.isInstance(payload)) { - answer = JmsMessageType.Stream; + answer = JmsMessageType.Bytes; + } else if (ByteBuffer.class.isInstance(payload)) { + answer = JmsMessageType.Bytes; + } else if (File.class.isInstance(payload)) { + answer = JmsMessageType.Bytes; + } else if (Reader.class.isInstance(payload)) { + answer = JmsMessageType.Bytes; } else if (String.class.isInstance(payload)) { answer = JmsMessageType.Text; + } else if (char[].class.isInstance(payload)) { + answer = JmsMessageType.Text; + } else if (Character.class.isInstance(payload)) { + answer = JmsMessageType.Text; } else if (Serializable.class.isInstance(payload)) { answer = JmsMessageType.Object; } else { http://git-wip-us.apache.org/repos/asf/camel/blob/3cf9f7be/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/typeconversion/JMSMessageHelperTypeConversionTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/typeconversion/JMSMessageHelperTypeConversionTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/typeconversion/JMSMessageHelperTypeConversionTest.java new file mode 100644 index 0000000..11c7995 --- /dev/null +++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/typeconversion/JMSMessageHelperTypeConversionTest.java @@ -0,0 +1,161 @@ +/** + * 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.component.sjms.typeconversion; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.io.Reader; +import java.io.StringReader; +import java.nio.ByteBuffer; + +import javax.jms.BytesMessage; +import javax.jms.Message; +import javax.jms.TextMessage; + +import org.apache.activemq.command.ActiveMQBytesMessage; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.sjms.support.JmsTestSupport; +import org.junit.Test; + +public class JMSMessageHelperTypeConversionTest extends JmsTestSupport { + + private static final String SJMS_QUEUE_URI = "sjms:queue:start"; + private static final String MOCK_RESULT_URI = "mock:result"; + private Exchange message; + + @Test + public void testJMSMessageHelperString() throws Exception { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + + template.sendBody(SJMS_QUEUE_URI, "Hello Camel"); + assertMockEndpointsSatisfied(); + assertTrue(String.class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperInputStream() throws Exception { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + String p = "Hello Camel"; + InputStream is = new ByteArrayInputStream( p.getBytes() ); + template.sendBody(SJMS_QUEUE_URI, is); + assertMockEndpointsSatisfied(); + assertTrue(byte[].class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperByteBuffer() throws Exception { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + String p = "Hello Camel"; + ByteBuffer bb = ByteBuffer.wrap(p.getBytes()); + template.sendBody(SJMS_QUEUE_URI, bb); + assertMockEndpointsSatisfied(); + assertTrue(byte[].class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperFile() throws InterruptedException, IOException { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + String p = "Hello Camel"; + File f = File.createTempFile("tmp-test", ".txt"); + BufferedWriter bw = new BufferedWriter(new FileWriter(f)); + bw.write(p); + bw.close(); + template.sendBody(SJMS_QUEUE_URI, f); + assertMockEndpointsSatisfied(); + boolean resultDelete = f.delete(); + assertTrue(resultDelete); + assertTrue(byte[].class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperReader() throws InterruptedException, IOException { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + String p = "Hello Camel"; + File f = File.createTempFile("tmp-test", ".txt"); + BufferedWriter bw = new BufferedWriter(new FileWriter(f)); + bw.write(p); + bw.close(); + Reader test = new BufferedReader(new FileReader(f.getAbsolutePath())); + template.sendBody(SJMS_QUEUE_URI, test); + assertMockEndpointsSatisfied(); + boolean resultDelete = f.delete(); + assertTrue(resultDelete); + assertTrue(byte[].class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperStringReader() throws InterruptedException, FileNotFoundException { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + String p = "Hello Camel"; + StringReader test = new StringReader(p); + template.sendBody(SJMS_QUEUE_URI, test); + assertMockEndpointsSatisfied(); + assertTrue(byte[].class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperChar() throws InterruptedException, FileNotFoundException { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("H"); + char p = 'H'; + template.sendBody(SJMS_QUEUE_URI, p); + assertMockEndpointsSatisfied(); + assertTrue(String.class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperCharacter() throws InterruptedException, FileNotFoundException { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("H"); + Character p = 'H'; + template.sendBody(SJMS_QUEUE_URI, p); + assertMockEndpointsSatisfied(); + assertTrue(String.class.isInstance(message.getIn().getBody())); + } + + @Test + public void testJMSMessageHelperCharArray() throws InterruptedException, FileNotFoundException { + getMockEndpoint(MOCK_RESULT_URI).expectedBodiesReceived("Hello Camel"); + char[] p = {'H','e','l','l','o',' ','C','a','m','e','l'}; + template.sendBody(SJMS_QUEUE_URI, p); + assertMockEndpointsSatisfied(); + assertTrue(String.class.isInstance(message.getIn().getBody())); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + interceptSendToEndpoint(MOCK_RESULT_URI).process(new Processor() { + public void process(Exchange exchange) throws Exception { + message = (Exchange) exchange; + } + }); + + from(SJMS_QUEUE_URI).to(MOCK_RESULT_URI); + } + }; + } +}