JAXBPage edited by Ćukasz DywickiAdded information about partial operations from CAMEL-2381 improvement.JAXBJAXB is a Data Format which uses the JAXB2 XML marshalling standard which is included in Java 6 to unmarshal an XML payload into Java objects or to marshal Java objects into an XML payload. Using the Java DSLFor example the following uses a named DataFormat of jaxb which is configured with a number of Java package names to initialize the JAXBContext. DataFormat jaxb = new JaxbDataFormat("com.acme.model"); from("activemq:My.Queue"). unmarshal(jaxb). to("mqseries:Another.Queue"); You can if you prefer use a named reference to a data format which can then be defined in your Registry such as via your Spring XML file. e.g. from("activemq:My.Queue"). unmarshal("myJaxbDataType"). to("mqseries:Another.Queue"); Using Spring XMLThe following example shows how to use JAXB to unmarshal using Spring configuring the jaxb data type <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <unmarshal> <jaxb prettyPrint="true" contextPath="org.apache.camel.example"/> </unmarshal> <to uri="mock:result"/> </route> </camelContext> This example shows how to configure the data type just once and reuse it on multiple routes. For Camel versions below 1.5.0 you have to set the <jaxb> element directly in <camelContext>. <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <dataFormats> <jaxb id="myJaxb" prettyPrint="true" contextPath="org.apache.camel.example"/> </dataFormats> <route> <from uri="direct:start"/> <marshal ref="myJaxb"/> <to uri="direct:marshalled"/> </route> <route> <from uri="direct:marshalled"/> <unmarshal ref="myJaxb"/> <to uri="mock:result"/> </route> </camelContext>
Partial marshalling/unmarshallingThis feature is new to Camel 2.2.0. <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:marshal"/> <marshal> <jaxb prettyPrint="false" contextPath="org.apache.camel.example" partClass="org.apache.camel.example.PurchaseOrder" partNamespace="{http://example.camel.org/apache}po" /> </marshal> <to uri="mock:marshal"/> </route> <route> <from uri="direct:unmarshal"/> <unmarshal> <jaxb prettyPrint="false" contextPath="org.apache.camel.example" partClass="org.apache.camel.example.Partial" /> </unmarshal> <to uri="mock:unmarshal"/> </route> </camelContext> For marshalling you have to add partNamespace attribute with QName of destination namespace. Example of Spring DSL you can find above. Ignoring the NonXML CharacterThis feature is new to Camel 2.2.0.
This feature has been tested with Woodstox 3.2.9 and Sun JDK 1.6 StAX implementation. Working with the ObjectFactoryIf you use XJC to create the java class from the schema, you will get an ObjectFactory for you JAXB context. Since the ObjectFactory uses JAXBElement to hold the reference of the schema and element instance value, from Camel 1.5.1 jaxbDataformat will ignore the JAXBElement by default and you will get the element instance value instead of the JAXBElement object form the unmarshaled message body. Setting encodingIn Camel 1.6.1 and newer you can set the encoding option to use when marshalling. Its the Marshaller.JAXB_ENCODING encoding property on the JAXB Marshaller. In this Spring DSL we have defined to use iso-8859-1 as the encoding: <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <marshal> <jaxb prettyPrint="false" encoding="iso-8859-1" contextPath="org.apache.camel.example"/> </marshal> <to uri="mock:result"/> </route> </camelContext> DependenciesTo use JAXB in your camel routes you need to add the a dependency on camel-jaxb which implements this data format. If you use maven you could just add the following to your pom.xml, substituting the version number for the latest & greatest release (see the download page for the latest versions). <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jaxb</artifactId> <version>1.6.0</version> </dependency>
Change Notification Preferences
View Online
|
View Change
|
Add Comment
|
- [CONF] Apache Camel > JAXB confluence
- [CONF] Apache Camel > JAXB confluence
- [CONF] Apache Camel > JAXB confluence
- [CONF] Apache Camel > JAXB confluence
- [CONF] Apache Camel > JAXB confluence
- [CONF] Apache Camel > JAXB confluence
- [CONF] Apache Camel > JAXB confluence