users@jersey.java.net

[Jersey] Re: Jersey fails in GFv3.1

From: Markus Karg <karg_at_quipsy.de>
Date: Thu, 14 Jul 2011 16:28:10 +0200

Jakub,

 

just noticed that my last mail did not contain the source code that I am
executing. Strange... so I am sending it again.

 

// Workaround for GFv3: Using getContextResolver

JAXBContext jaxbContext =
this.providers.getContextResolver(JAXBContext.class,
APPLICATION_XML_TYPE).getContext(QuerySchemaDiscovery.class);

StringWriter sw = new StringWriter();

jaxbContext.createMarshaller().marshal(querySchemaDiscovery, sw);

return Response.status(MULTI_STATUS).entity(sw.toString()).build();

 

That code is working well. So the big question is: If
"providers.getContextResolver" works well, why is the following NOT
working?

 

// Original Code works well in GFv2

return
Response.status(MULTI_STATUS).entity(querySchemaDiscovery).build();

 

Again, the code actually works well in GFv2 and standalone, but since
GFv3 I must use the lenghty code above.

 

Thanks

Markus

 

 

 

From: Jakub Podlesak [mailto:jakub.podlesak_at_oracle.com]
Sent: Dienstag, 12. Juli 2011 17:59
To: users_at_jersey.java.net
Subject: [Jersey] Re: Jersey fails in GFv3.1

 

Hi Markus,

That is really strange. Given that the very same application
works fine on GFv2 it might be related to some GFv3 class-loading
magic.
Any chance you could isolate a small simple
reproducible test case to share?

The only other option i can think of at the moment is you may try
to re-bundle your application, remove all Jersey jars from it
and try to redeploy. Does the issue reproduce then?

~Jakub



On 07/12/2011 03:01 PM, Markus Karg wrote:

[Crossposted to GlassFish Forum]

Our JAX-RS application is working well standalone (Grizzly) as well as
in GFv2ur2 (Jersey-1.4 bundled in our EAR), but fails in GFv3.1
(Jersey-1.5 is part of GF)!

In particular, we are providing a custom ContextResolver which provides
(besides more) two classes: "QuerySchemaDiscovery" and
"BasicSearchSchema". Within "getContext" we are doing some output to see
what class was requests (for debug purposes).

Our resource method receives a "QuerySchemaDiscovere" instance (i. e.
JAXB can resolve it using our custom ContextResolver), then wants to
return an instance of "BasicSearchSchema". And here is the funny thing:
GFv3.1 says that "BasicSearchSchema" is not part of the JAXB context.
Moreover, there is a log entry found for
"getContext(QuerySchemaDiscovere)" but NOT for
"getContext(BasicSearchSchema)", so obviously is seems GFv3.1 is using a
differen context...

Caused by: javax.xml.bind.JAXBException: class
net.java.dev.webdav.jaxrs.search.xml.elements.BasicSearchSchema nor any
of its super class is known to this context.
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.
java:611)
at
com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializ
eListBody(ArrayReferenceNodeProperty.java:112)
... 56 more

I cannot believe that it is a bug in my application, as it runs standone
and in GFv2ur2, so I think it is a bug in GFv3.1. Any ideas what to do?

Thanks!

Markus