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.
------------------------------------------------------------------------------