Hello,

I want to use jacksonXml as the xmlDateFormat for my Rest bindings.

restConfiguration()
                .bindingMode(RestBindingMode.json_xml) // or auto
                .jsonDataFormat("jackson")
                .xmlDataFormat("jacksonXml“)

Note, I am also using Spring Boot and have the following dependency added.

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-jacksonxml-starter</artifactId>
</dependency>

camel-jaxb is not on the classpath.

When I start my application, I get this:

Caused by: java.lang.IllegalArgumentException: Cannot find 
RestBindingJaxbDataFormatFactory on classpath. Add camel-jaxb to classpath.
      at 
org.apache.camel.impl.engine.SimpleCamelContext.createRestBindingJaxbDataFormatFactory(SimpleCamelContext.java:635)
 ~[camel-base-engine-4.14.1.jar:4.14.1]
      at 
org.apache.camel.impl.engine.DefaultCamelContextExtension.lazyInitAndAdd(DefaultCamelContextExtension.java:1133)
 ~[camel-base-engine-4.14.1.jar:4.14.1]
      at 
org.apache.camel.impl.engine.DefaultCamelContextExtension.lambda$lazyAddContextPlugin$0(DefaultCamelContextExtension.java:1129)
 ~[camel-base-engine-4.14.1.jar:4.14.1]
      at 
org.apache.camel.impl.engine.DefaultContextPluginManager.getContextPlugin(DefaultContextPluginManager.java:43)
 ~[camel-base-engine-4.14.1.jar:4.14.1]
      at 
org.apache.camel.impl.engine.DefaultCamelContextExtension.getContextPlugin(DefaultCamelContextExtension.java:1104)
 ~[camel-base-engine-4.14.1.jar:4.14.1]
      at 
org.apache.camel.support.PluginHelper.getRestBindingJaxbDataFormatFactory(PluginHelper.java:451)
 ~[camel-support-4.14.1.jar:4.14.1]
      at 
org.apache.camel.support.PluginHelper.getRestBindingJaxbDataFormatFactory(PluginHelper.java:443)
 ~[camel-support-4.14.1.jar:4.14.1]
      at 
org.apache.camel.support.processor.RestBindingAdviceFactory.build(RestBindingAdviceFactory.java:115)
 ~[camel-support-4.14.1.jar:4.14.1]
      at 
org.apache.camel.reifier.rest.RestBindingReifier.createRestBindingAdvice(RestBindingReifier.java:90)
 ~[camel-core-reifier-4.14.1.jar:4.14.1]
      at 
org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:335) 
~[camel-core-reifier-4.14.1.jar:4.14.1]

When I add camel-jaxb, then I get this:

Caused by: java.lang.ClassCastException: class 
org.apache.camel.component.jacksonxml.JacksonXMLDataFormat cannot be cast to 
class org.apache.camel.converter.jaxb.JaxbDataFormat 
(org.apache.camel.component.jacksonxml.JacksonXMLDataFormat and 
org.apache.camel.converter.jaxb.JaxbDataFormat are in unnamed module of loader 
'app')
      at 
org.apache.camel.converter.jaxb.JaxbDataFormatConfigurer.configure(JaxbDataFormatConfigurer.java:21)
 ~[camel-jaxb-4.14.1.jar:4.14.1]
      at 
org.apache.camel.support.PropertyBindingSupport.setSimplePropertyViaConfigurer(PropertyBindingSupport.java:806)
 ~[camel-support-4.14.1.jar:4.14.1]

Looking at the code, it seems like even though jacksonXml has been defined as 
the data format, it will still try to load the JaxbDataFormat via the 
RestBindingAdviceFactory.

if (jaxb != null) {
    // to setup JAXB we need to use camel-jaxb
    
PluginHelper.getRestBindingJaxbDataFormatFactory(camelContext).setupJaxb(camelContext,
 config,
        bc.getType(), bc.getTypeClass(),
        bc.getOutType(), bc.getOutTypeClass(),
        jaxb, outJaxb);
}

The variable jaxb is not null, because "jaxb = 
camelContext.createDataFormat(name);“ and it will be of type 
JacksonXMLDataFormat.

Am I missing a configuration, or is Jackson XML not meant to work with Rest?

Thank you in advance.

Regards,
Arne B.
--

------------------------------------------------------------------------------
Informationen (einschließlich Pflichtangaben und Datenschutzerklärungen) zu 
einzelnen, innerhalb der EU tätigen Gesellschaften und Zweigniederlassungen der 
CITTI-Gruppe finden Sie unter http://www.citti.de/html/pflichtangaben.html. 
Diese E-Mail enthält vertrauliche und/ oder rechtlich geschützte Informationen. 
Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten 
haben, informieren Sie bitte sofort den Absender und vernichten Sie diese 
E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail 
ist nicht gestattet.

Please refer to http://www.citti.de/html/pflichtangaben.html for information 
(including mandatory corporate particulars and data protection declarations) on 
selected CITTI branches and group companies registered or incorporated in the 
European Union. This e-mail may contain confidential and/or privileged 
information. If you are not the intended recipient (or have received this 
e-mail in error) please notify the sender immediately and delete this e-mail. 
Any unauthorized copying, disclosure or distribution of the material in this 
e-mail is strictly forbidden.
------------------------------------------------------------------------------

Reply via email to