Hi Sergey
Sergey Beryozkin wrote:
>
> So as far as the NPE is concerned, it's coming from the JAXB layer, which
> is then rethrown by JAXBElementProvider, right ?
>
> or is NPE originating from JAXBElementProvider.unmarshalFromReader() ?
>
It comes from JAXB layer, that's why I feel reluctant to dig deeper ;)
Sergey Beryozkin wrote:
>
> This function is called if an XMLStreamReader has been found on a
> message...
> More information is needed, perhaps you can post a sample
> JaxbEnrichedObject class ? Or some test case ?
>
Find attached maven project uploaded with this email. In this simplified
case I do not hit NPE in JAXB but silently WebClient returns unmarshalled
object that is empty inside (nulls instead of fulfilled fields).
Find code snippets below:
-------------------------------
public class JaxrsService {
@GET
@Path("/foo")
@Produces( "text/xml" )
public Foo fooXml() {
return new Foo("barval", "bazval");
}
@GET
@Path("/foo")
@Produces( "text/plain" )
public String fooString() {
return new Foo("barval", "bazval").toString();
}
}
-------------------------------
@XmlRootElement
public class Foo {
private String bar;
private String baz;
...
@XmlElement
public String getBar() {
return bar;
}
@XmlElement
public String getBaz() {
return baz;
}
...
}
-------------------------------
public class JaxrsServiceTest {
private static Server server = null;
@BeforeClass
public static void beforeClass() throws Exception {
server = new Server(6080);
Context root = new Context(server, "/");
ServletHolder servlet = new ServletHolder(
new CXFNonSpringJaxrsServlet());
servlet.setInitParameter("jaxrs.serviceClasses",
"net.amichalec.wctest.JaxrsService");
root.addServlet(servlet, "/");
server.start();
}
@AfterClass
public static void afterClass() throws Exception {
server.stop();
}
@Test
// it proves webclient and server work fine
public void testNoJaxb() {
WebClient wc = WebClient.create("http://localhost:6080");
wc.path("/foo").accept("text/plain");
String foo = wc.get(String.class);
TestCase.assertEquals(new JaxrsService().fooString(), foo);
}
@Test
// this time there is not NPE in unmarshalling but returned object
// is empty (contain nulls)
public void testJaxbFailing() {
WebClient wc = WebClient.create("http://localhost:6080");
wc.path("/foo").accept("text/xml");
Foo foo = wc.get(Foo.class);
TestCase.assertEquals(new JaxrsService().fooXml(), foo);
}
@Test
// even though fromClient() offers cls parameter as
// "if not interface then a CGLIB proxy will be created"
// WAE is thrown (swallowing real cause "class is not interface")
public void testProxyFailing() {
WebClient wc = WebClient.create("http://localhost:6080");
JaxrsService proxy = JAXRSClientFactory.fromClient(wc,
JaxrsService.class);
JaxrsService local = new JaxrsService();
TestCase.assertEquals(local.fooXml(), proxy.fooXml());
}
}
http://www.nabble.com/file/p25343761/webclient-test.zip webclient-test.zip
--
View this message in context:
http://www.nabble.com/WebClient-fails-to-unmarshall-tp25337879p25343761.html
Sent from the cxf-user mailing list archive at Nabble.com.