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 2009/05/04 18:28:59 UTC
svn commit: r771351 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/model/
camel-core/src/main/java/org/apache/camel/processor/
camel-core/src/main/java/org/apache/camel/util/
camel-core/src/test/java/org/apache/camel/processor/ components...
Author: davsclaus
Date: Mon May 4 16:28:57 2009
New Revision: 771351
URL: http://svn.apache.org/viewvc?rev=771351&view=rev
Log:
CAMEL-1573: Added charset option to convertBodyTo. And fixed bug loading byte[] classes using loadClass.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ConvertBodyDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ConvertBodyDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ConvertBodyDefinition.java?rev=771351&r1=771350&r2=771351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ConvertBodyDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ConvertBodyDefinition.java Mon May 4 16:28:57 2009
@@ -39,6 +39,8 @@
public class ConvertBodyDefinition extends ProcessorDefinition<ProcessorDefinition> {
@XmlAttribute
private String type;
+ @XmlAttribute(required = false)
+ private String charset;
@XmlTransient
private Class typeClass;
@@ -54,6 +56,12 @@
setType(typeClass.getName());
}
+ public ConvertBodyDefinition(Class typeClass, String charset) {
+ setTypeClass(typeClass);
+ setType(typeClass.getName());
+ setCharset(charset);
+ }
+
@Override
public String toString() {
return "convertBodyTo[" + getType() + "]";
@@ -66,7 +74,7 @@
@Override
public Processor createProcessor(RouteContext routeContext) throws Exception {
- return new ConvertBodyProcessor(getTypeClass());
+ return new ConvertBodyProcessor(getTypeClass(), getCharset());
}
@Override
@@ -91,6 +99,14 @@
this.typeClass = typeClass;
}
+ public String getCharset() {
+ return charset;
+ }
+
+ public void setCharset(String charset) {
+ this.charset = charset;
+ }
+
public Class getTypeClass() {
if (typeClass == null) {
Class clazz = createTypeClass();
@@ -102,27 +118,4 @@
return typeClass;
}
- // Fluent API
- //-------------------------------------------------------------------------
- /**
- * Sets the type class that you want ConvertBodyType to covert
- *
- * @param typeClass the type class that you want to covert body instance to
- * @return the builder
- */
- public ConvertBodyDefinition typeClass(Class typeClass) {
- setTypeClass(typeClass);
- return this;
- }
-
- /**
- * Sets the type class name that you want to covert body instance to
- *
- * @param type the type class name
- * @return the builder
- */
- public ConvertBodyDefinition type(String type) {
- setType(type);
- return this;
- }
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=771351&r1=771350&r2=771351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java Mon May 4 16:28:57 2009
@@ -1744,14 +1744,15 @@
}
/**
- * Converts the IN message body to the specified class type
+ * Converts the IN message body to the specified type
*
- * @param typeString the type to convert to as a fully qualified classname
+ * @param type the type to convert to
+ * @param charset the charset to use by type converters (not all converters support specifc charset)
* @return the builder
*/
@SuppressWarnings("unchecked")
- public Type convertBodyTo(String typeString) {
- addOutput(new ConvertBodyDefinition(typeString));
+ public Type convertBodyTo(Class type, String charset) {
+ addOutput(new ConvertBodyDefinition(type, charset));
return (Type) this;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java?rev=771351&r1=771350&r2=771351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java Mon May 4 16:28:57 2009
@@ -29,9 +29,16 @@
*/
public class ConvertBodyProcessor implements Processor {
private final Class type;
+ private final String charset;
public ConvertBodyProcessor(Class type) {
this.type = type;
+ this.charset = null;
+ }
+
+ public ConvertBodyProcessor(Class type, String charset) {
+ this.type = type;
+ this.charset = charset;
}
@Override
@@ -41,7 +48,10 @@
@SuppressWarnings("unchecked")
public void process(Exchange exchange) throws Exception {
- Message in = exchange.getIn();
+ Message in = exchange.getIn();
+ if (charset != null) {
+ exchange.setProperty(Exchange.CHARSET_NAME, charset);
+ }
Object value = in.getMandatoryBody(type);
if (exchange.getPattern().isOutCapable()) {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=771351&r1=771350&r2=771351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Mon May 4 16:28:57 2009
@@ -508,6 +508,11 @@
// must clean the name so its pure java name, eg remoing \n or whatever people can do in the Spring XML
name = normalizeClassName(name);
+ // special for byte[] as its common to use
+ if ("java.lang.byte[]".equals(name) || "byte[]".equals(name)) {
+ return byte[].class;
+ }
+
// try context class loader first
Class clazz = doLoadClass(name, Thread.currentThread().getContextClassLoader());
if (clazz == null) {
@@ -894,7 +899,7 @@
public static String normalizeClassName(String name) {
StringBuffer sb = new StringBuffer(name.length());
for (char ch : name.toCharArray()) {
- if (ch == '.' || Character.isJavaIdentifierPart(ch)) {
+ if (ch == '.' || ch == '[' || ch == ']' || Character.isJavaIdentifierPart(ch)) {
sb.append(ch);
}
}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java?rev=771351&r1=771350&r2=771351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java Mon May 4 16:28:57 2009
@@ -50,6 +50,29 @@
assertMockEndpointsSatisfied();
}
+ public void testConvertCharset() throws Exception {
+ byte[] body = "Hello World".getBytes("iso-8859-1");
+
+ MockEndpoint result = getMockEndpoint("mock:result");
+ result.expectedBodiesReceived(body);
+
+ template.sendBody("direct:charset", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testConvertCharsetFail() throws Exception {
+ byte[] body = "Hello World".getBytes("utf-8");
+
+ MockEndpoint result = getMockEndpoint("mock:result");
+ result.expectedBodiesReceived(body);
+
+ template.sendBody("direct:charset2", "Hello World");
+
+ // should NOT be okay as we expected utf-8 but got it in utf-16
+ result.assertIsNotSatisfied();
+ }
+
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
@@ -58,6 +81,10 @@
from("direct:start").convertBodyTo(Integer.class).to("mock:result");
from("direct:invalid").convertBodyTo(Date.class).to("mock:result");
+
+ from("direct:charset").convertBodyTo(byte[].class, "iso-8859-1").to("mock:result");
+
+ from("direct:charset2").convertBodyTo(byte[].class, "utf-16").to("mock:result");
}
};
}
Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml?rev=771351&r1=771350&r2=771351&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml Mon May 4 16:28:57 2009
@@ -22,27 +22,42 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
">
- <!-- START SNIPPET: example -->
- <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <route>
- <from uri="direct:start" />
- <convertBodyTo type="java.lang.Integer" />
- <to uri="mock:result" />
- </route>
- <route errorHandlerRef="deadLetterErrorHandler">
- <from uri="direct:invalid" />
- <convertBodyTo type="java.util.Date" />
- <to uri="mock:result" />
- </route>
- </camelContext>
-
- <bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
- <property name="deadLetterUri" value="mock:dead"/>
- <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
- </bean>
-
- <bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
+ <!-- START SNIPPET: example -->
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+
+ <route>
+ <from uri="direct:start"/>
+ <convertBodyTo type="java.lang.Integer"/>
+ <to uri="mock:result"/>
+ </route>
+
+ <route errorHandlerRef="deadLetterErrorHandler">
+ <from uri="direct:invalid"/>
+ <convertBodyTo type="java.util.Date"/>
+ <to uri="mock:result"/>
+ </route>
+
+ <route>
+ <from uri="direct:charset"/>
+ <convertBodyTo type="java.lang.byte[]" charset="iso-8859-1"/>
+ <to uri="mock:result"/>
+ </route>
+
+ <route>
+ <from uri="direct:charset2"/>
+ <convertBodyTo type="java.lang.byte[]" charset="utf-16"/>
+ <to uri="mock:result"/>
+ </route>
+
+ </camelContext>
+
+ <bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
+ <property name="deadLetterUri" value="mock:dead"/>
+ <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
+ </bean>
+
+ <bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
<property name="maximumRedeliveries" value="0"/>
</bean>
- <!-- END SNIPPET: example -->
+ <!-- END SNIPPET: example -->
</beans>