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

Reply via email to