Custom DataFormatPage added by Claus IbsenCustom DataFormatYou can use your custom Data Format implementation with Camel. All you have to do is to implement the DataFormat interface. For example in the following we will implement a reverse data format as shown below: Custom implementation of DataFormat that reverses data public static final class MyReverseDataFormat implements DataFormat { public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception { byte[] bytes = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, graph); String body = reverseBytes(bytes); stream.write(body.getBytes()); } public Object unmarshal(Exchange exchange, InputStream stream) throws Exception { byte[] bytes = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, stream); String body = reverseBytes(bytes); return body; } private String reverseBytes(byte[] data) { StringBuilder sb = new StringBuilder(data.length); for (int i = data.length - 1; i >= 0; i--) { char ch = (char) data[i]; sb.append(ch); } return sb.toString(); } } And to use it in Java DSL: from("direct:a") .marshal().custom("reverse") .to("mock:a"); from("direct:b") .unmarshal().custom("reverse") .to("mock:b"); And likewise to use it in XML DSL: <!-- this is our custom data format implementation --> <bean id="reverse" class="org.apache.camel.impl.RefDataFormatTest$MyReverseDataFormat"/> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:a"/> <marshal> <!-- refer to my custom data format --> <custom ref="reverse"/> </marshal> <to uri="mock:a"/> </route> <route> <from uri="direct:b"/> <unmarshal> <!-- refer to my custom data format --> <custom ref="reverse"/> </unmarshal> <to uri="mock:b"/> </route> </camelContext> Notice in the XML DSL example above we use <custom> to refer to a custom data format. This requires Camel 2.8 or better. In older releases you would have to use the ref attribute as shown below. Notice the ref attribute has been @deprecated and you should prefer to use the <custom> way:
<marshal ref="reverse"/>
See Also
Change Notification Preferences
View Online
|
Add Comment
|
- [CONF] Apache Camel > Custom DataFormat confluence
- [CONF] Apache Camel > Custom DataFormat confluence