[ 
https://issues.apache.org/jira/browse/CAMEL-13282?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrea Cosentino updated CAMEL-13282:
-------------------------------------
    Fix Version/s: 2.24.0

> Can't use validation of JaxbDataFormat of non Root JAXB Elements
> ----------------------------------------------------------------
>
>                 Key: CAMEL-13282
>                 URL: https://issues.apache.org/jira/browse/CAMEL-13282
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jaxb
>    Affects Versions: 2.23.1
>            Reporter: Michael Lück
>            Priority: Major
>             Fix For: 2.24.0
>
>
> When a JAXB class that is created or generated has no @XmlRootElement
>  annotation JaxbDataFormat would try to find a ObjectFactory method which
>  can create a JAXBElement for the type of the object. It would then use
>  the JAXBElement to marshal the object.
> While trying to find the objectFactory and to call the appropriate
>  method it would catch *ALL* Exceptions that are thrown and just logs a
>  message.
> While I don't see why an Exception should only be logged here, this especially
>  breaks when the exception is thrown due to a validation error. Because
>  the calls to the *marshal* operation will throw an MarshalException in
>  that case which would be caught by the catch block. In other cases where
>  no object factory is used but JAXB classes with XmlRootElement
>  Annotations or JAXBElements are used the MarshalExceptions will be
>  thrown and the doMarshal method will be left.
> I already created a PR on github for this: [PR2800 
> |https://github.com/apache/camel/pull/2800]
> *Workaround:* If someone is experiencing this problem the first thing to 
> check whether is it possible to make the JAXB Class have the @XmlRootElement 
> Annotation. In that case you won't experience any problems. 
> Especially when the classes are generated from XSD you may either use an 
> separate binding to add the annotation or you may create the element 
> definitions in the xsd using an anonymous inline complexType/simpleType that 
> extends your desired type. 
> In my case the @XmlRootElement annotation was not added because i used the 
> definition as follows:
> {code:xml}
> <element name="myElement" type="tns:myElementType"/>
> <complexType name="myElementType">
> <!-- your type definition here -->
> </complexType>
> {code}
> instead you should write
> {code:xml}
> <element name="myElement>
>   <complexType>
>    <!-- your type definition here -->
>   </complexType>
> </element>
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to