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 2008/09/08 21:38:39 UTC
svn commit: r693217 - in /activemq/camel/trunk:
camel-core/src/main/java/org/apache/camel/converter/
components/camel-jms/src/main/java/org/apache/camel/component/jms/
components/camel-jms/src/test/java/org/apache/camel/component/jms/
Author: davsclaus
Date: Mon Sep 8 12:38:39 2008
New Revision: 693217
URL: http://svn.apache.org/viewvc?rev=693217&view=rev
Log:
CAMEL-299: camel-jms now converts File, Reader, InputStream and ByteBuffer to javax.jms.BytesMessage instead of ObjectMessage
Added:
activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java (contents, props changed)
- copied, changed from r693180, activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteToFileTest.java
activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java (with props)
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/NIOConverter.java
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java?rev=693217&r1=693216&r2=693217&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java Mon Sep 8 12:38:39 2008
@@ -42,7 +42,6 @@
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URL;
-import java.nio.charset.Charset;
import java.util.Properties;
import javax.xml.transform.OutputKeys;
@@ -117,7 +116,6 @@
@Converter
public static StringReader toReader(String text) {
- // TODO could we automatically find this?
return new StringReader(text);
}
@@ -159,6 +157,20 @@
}
@Converter
+ public static byte[] toByteArray(File file) throws IOException {
+ return toBytes(toInputStream(file));
+ }
+
+ @Converter
+ public static byte[] toByteArray(Reader reader) throws IOException {
+ if (reader instanceof BufferedReader) {
+ return toByteArray((BufferedReader)reader);
+ } else {
+ return toByteArray(new BufferedReader(reader));
+ }
+ }
+
+ @Converter
public static String toString(URL url) throws IOException {
return toString(toInputStream(url));
}
@@ -196,28 +208,38 @@
}
@Converter
+ public static byte[] toByteArray(BufferedReader reader) throws IOException {
+ if (reader == null) {
+ return null;
+ }
+
+ StringBuilder sb = new StringBuilder(1024);
+ char[] buf = new char[1024];
+ try {
+ int len = reader.read(buf);
+ if (len != -1) {
+ sb.append(buf, 0, len);
+ }
+ } finally {
+ try {
+ reader.close();
+ } catch (IOException e) {
+ LOG.warn("Failed to close stream: " + e, e);
+ }
+ }
+ return sb.toString().getBytes();
+ }
+
+ @Converter
public static String toString(InputStream in) throws IOException {
return toString(toReader(in));
}
+ @Converter
public static String toString(Source source) throws TransformerException, IOException {
return toString(source, null);
}
- public static String toString(Source source, Properties props) throws TransformerException, IOException {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- StreamResult sr = new StreamResult(bos);
- Transformer trans = TransformerFactory.newInstance().newTransformer();
- if (props == null) {
- props = new Properties();
- props.put(OutputKeys.OMIT_XML_DECLARATION, "yes");
- }
- trans.setOutputProperties(props);
- trans.transform(source, sr);
- bos.close();
- return bos.toString();
- }
-
@Converter
public static InputStream toInputStream(byte[] data) {
return new ByteArrayInputStream(data);
@@ -257,4 +279,22 @@
}
bos.flush();
}
+
+ protected static String toString(Source source, Properties props) throws TransformerException, IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ try {
+ StreamResult sr = new StreamResult(bos);
+ Transformer trans = TransformerFactory.newInstance().newTransformer();
+ if (props == null) {
+ props = new Properties();
+ props.put(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ }
+ trans.setOutputProperties(props);
+ trans.transform(source, sr);
+ } finally {
+ bos.close();
+ }
+ return bos.toString();
+ }
+
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/NIOConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/NIOConverter.java?rev=693217&r1=693216&r2=693217&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/NIOConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/NIOConverter.java Mon Sep 8 12:38:39 2008
@@ -23,7 +23,6 @@
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
import org.apache.camel.Converter;
import org.apache.camel.Exchange;
Modified: activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=693217&r1=693216&r2=693217&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original)
+++ activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Mon Sep 8 12:38:39 2008
@@ -17,6 +17,9 @@
package org.apache.camel.component.jms;
import java.io.Serializable;
+import java.io.File;
+import java.io.Reader;
+import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
@@ -24,6 +27,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.nio.ByteBuffer;
import javax.jms.BytesMessage;
import javax.jms.Destination;
@@ -319,13 +323,19 @@
populateMapMessage(result, map, context);
return result;
} catch (JMSException e) {
- // if MapMessage creation failed then fall back to Object
- // Message
+ // if MapMessage creation failed then fall back to Object Message
+ LOG.warn("Can not populate MapMessage will fall back to ObjectMessage, cause by: " + e.getMessage());
}
}
if (body instanceof String) {
return session.createTextMessage((String)body);
}
+ if (body instanceof File || body instanceof Reader || body instanceof InputStream || body instanceof ByteBuffer) {
+ BytesMessage result = session.createBytesMessage();
+ byte[] bytes = context.getTypeConverter().convertTo(byte[].class, body);
+ result.writeBytes(bytes);
+ return result;
+ }
if (body instanceof Serializable) {
return session.createObjectMessage((Serializable)body);
}
Copied: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java (from r693180, activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteToFileTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java?p2=activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java&p1=activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteToFileTest.java&r1=693180&r2=693217&rev=693217&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteToFileTest.java (original)
+++ activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java Mon Sep 8 12:38:39 2008
@@ -16,40 +16,33 @@
*/
package org.apache.camel.component.jms;
-import java.io.File;
-
-import javax.jms.ConnectionFactory;
-
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.converter.IOConverter;
-
+import org.apache.camel.component.file.FileComponent;
import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import javax.jms.ConnectionFactory;
/**
- * Unit test that we can consume JMS message and store it as file (to avoid regression bug)
+ * Unit test that we can produce JMS message from files
*/
-public class JmsRouteToFileTest extends ContextTestSupport {
+public class FileRouteToJmsTest extends ContextTestSupport {
protected String componentName = "activemq";
public void testRouteToFile() throws Exception {
- deleteDirectory("target/routetofile");
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(byte[].class);
+ mock.message(0).bodyAs(String.class).isEqualTo("Hello World");
- template.sendBody("activemq:queue:hello", "Hello World");
+ deleteDirectory("target/routefromfile");
+ template.sendBodyAndHeader("file://target/routefromfile", "Hello World", FileComponent.HEADER_FILE_NAME, "hello.txt");
- // pause to let file producer save the file
- Thread.sleep(1500);
-
- // do file assertions
- File dir = new File("./target/routetofile");
- assertTrue("Should be directory", dir.isDirectory());
- File file = dir.listFiles()[0];
- assertTrue("File should exists", file.exists());
- String body = IOConverter.toString(file);
- assertEquals("Hello World", body);
+ assertMockEndpointsSatisifed();
}
protected CamelContext createCamelContext() throws Exception {
@@ -64,8 +57,10 @@
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("activemq:queue:hello").to("file://target/routetofile");
+ from("file://target/routefromfile").to("activemq:queue:hello");
+
+ from("activemq:queue:hello").to("mock:result");
}
};
}
-}
+}
\ No newline at end of file
Propchange: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java?rev=693217&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java (added)
+++ activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java Mon Sep 8 12:38:39 2008
@@ -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.camel.component.jms;
+
+import javax.jms.ConnectionFactory;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.ByteBuffer;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ * Unit test that we send payload as byte[] for certain types
+ */
+public class PayloadByteArrayJmsTest extends ContextTestSupport {
+
+ protected String componentName = "activemq";
+
+ public void testReaderShouldBeByteArray() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(byte[].class);
+ mock.message(0).bodyAs(String.class).isEqualTo("Hello World");
+
+ Reader body = new StringReader("Hello World");
+
+ template.sendBody("activemq:queue:hello", body);
+
+ assertMockEndpointsSatisifed();
+ }
+
+ public void testInputStreamShouldBeByteArray() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(byte[].class);
+ mock.message(0).bodyAs(String.class).isEqualTo("Hello World");
+
+ InputStream body = new ByteArrayInputStream("Hello World".getBytes());
+
+ template.sendBody("activemq:queue:hello", body);
+
+ assertMockEndpointsSatisifed();
+ }
+
+ public void testByteBufferShouldBeByteArray() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(byte[].class);
+ mock.message(0).bodyAs(String.class).isEqualTo("Hello World");
+
+ ByteBuffer body = ByteBuffer.wrap("Hello World".getBytes());
+
+ template.sendBody("activemq:queue:hello", body);
+
+ assertMockEndpointsSatisifed();
+ }
+
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext camelContext = super.createCamelContext();
+
+ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
+ camelContext.addComponent(componentName, jmsComponentClientAcknowledge(connectionFactory));
+
+ return camelContext;
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from("activemq:queue:hello").to("mock:result");
+ }
+ };
+ }
+}
\ No newline at end of file
Propchange: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date