Hi Lars, You're right, this behavior changed in jaxb-impl 2.3.0.
You may workaround by force downgrading the version in your pom file: <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.11</version> </dependency> Or changing your class definition with something as below: @XmlRootElement(name = "entry", namespace = "http://www.w3.org/2005/Atom") @XmlAccessorType(XmlAccessType.FIELD) public class SuccessResponse { @XmlElement(namespace = "http://www.w3.org/2005/Atom") private String id; ... } HTH, Alex On Wed, Oct 10, 2018 at 11:26 AM Lars Schaps <Lars.Schaps@msg.group> wrote: > Hello again. > Sorry, for posting again, but it seems my digital signature cause problem. > Did not expect that. > > Lars > > > Hi all. > > > > Sorry for cross posting. I already asked this question on Stack Overflow > > before I found the mailing list: > > > https://stackoverflow.com/questions/52716828/apache-camel-jaxb-unmarshalling- > > returns-null-properties-after-upgrade-from-camel > > > > After upgrading Apache Camel from 2.20.4 to 2.21.2 or even 2.22.1 a unit > test > > of my fails and I can't see why. > > > > I have a route, which receives an XML response, which I want to > unmarshal into > > a data class. This fails since Apache Camel 2.21.2. > > > > The JAXB context knows all data classes in the given package and picks > the > > right class. The unmarshaller creates the right object, but the > properties > > stay null. With debugging the SAX parser, it seemed as if the SAX parser > > deliberately ignores the text between the tags. > > > > I have seen on the Camel website that Camel 2.21.0 "Upgraded to JAXB > 2.3.0". I > > don't know what that means for me. > > > > My route looks like this: > > > > @Component > > public class NewsletterRoute extends RouteBuilder { > > > > 8<------------------------------------------------- > > > > @Override > > public void configure() { > > final DataFormat marshalFormat = > > new JacksonDataFormat(HybrisRequest.class); > > final JaxbDataFormat unmarshalFormat = new JaxbDataFormat(); > > unmarshalFormat.setContextPath( > > SuccessResponse.class.getPackage().getName()); > > > > from(URI) > > .routeId("subscribeRoute") > > // Fetch the auth token to send it as 'x-csrf-token' header. > > .setHeader(Exchange.HTTP_URI, > > method(this.backendUrlProvider, "getUrl")) > > .setHeader(Exchange.HTTP_PATH, > > constant(this.subscribeUnsubscribePath)) > > .setHeader(Exchange.HTTP_METHOD, HttpMethods.POST) > > .setHeader(Exchange.CONTENT_TYPE, constant("application/json")) > > // Marshal body to JSON > > .marshal(marshalFormat) > > .to(String.format("https4:backend" + > > "?sslContextParameters=hybrisSslContextParams" + > > "&x509HostnameVerifier=hybrisHostnameVerifier" + > > // don't throw on 3XX/4XX/5XX since > > // we need the response body > > "&throwExceptionOnFailure=false" + > > "&cookieStore=#hybrisCookieStore" + > > "&authUsername=%s" + > > "&authPassword=%s" + > > "&authenticationPreemptive=true" + > > "&httpClient.redirectsEnabled=true" + > > "&httpClient.maxRedirects=3" + > > "&httpClient.connectTimeout=%d" + > > "&httpClient.socketTimeout=%d", > > "RAW(" + username + ")", > > "RAW(" + password + ")", > > backendTimeoutMillis, > > backendTimeoutMillis)) > > .convertBodyTo(String.class) > > // Store the received response as property before > > // trying to unmarshal it > > .setProperty(PROPERTY_RESPONSE_RAW, body()) > > .unmarshal(unmarshalFormat); > > // @formatter:on > > } > > } > > > > > > The data class looks like this > > > > @XmlRootElement(name = "entry", namespace = "http://www.w3.org/2005/Atom > ") > > public class SuccessResponse { > > private String id; > > private String title; > > public String getId() { return id; } > > public void setId(String id) { this.id = id; } > > public String getTitle() { return title; } > > public void setTitle(String title) { this.title = title; } > > public String toString() { /*code cut out*/} > > } > > > > > > With Apache Camel 2.20.4 my unit test worked. With 2.21.2 and 2.22.1 it > > breaks. The problem is, that the unmarshaler won't fill the properties. > > > > The unit test just sends a valid request to Mockito, which returns the > XML. > > > > <?xml version="1.0" encoding="utf-8"?> > > <entry > > xml:base=" > https://xxx.xxx.xxx.xxx:44380/sap/opu/odata/sap/CUAN_IMPORT_SRV > > /" > > xmlns="http://www.w3.org/2005/Atom" > > xmlns:m=" > http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" > > xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"> > > <!-- 8<---------- Code cut out here ----------------------------------- > --> > > <id>bla</id> > > <title type="text">blub</title> > > </entry> > > > > > > Any ideas? > > > > Thanks > > Lars >