You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Larry Touve <lt...@potomacfusion.com> on 2010/07/12 21:59:20 UTC
MessageBodyReader exceptions with jersey client
(also posted on the jersey list)
I'm trying to use a jersey client application in OSGi, and I'm getting a MessageBodyReader not found exception. If I run the client application as a standalone POJO, everything works fine, but when I try to run it within an OSGi bundle, I get the exception. I verified that the bundle is importing jaxb and all other packages that it needs (or at least the ones I think it needs). I'm using version 1.3 of the jersey client (and version 3.0.1 Final of Glassfish). I've also tried earlier versions of jersey-client. Has anyone seen this behavior?
The imported packages within OSGi for my bundle:
com.sun.jersey.api.client,version=0.0.0 from com.sun.jersey.glassfish.v3.osgi.jersey-gf-bundle (109)<http://localhost:8080/osgi/system/console/bundles/109>
com.sun.jersey.api.client.config,version=0.0.0 from com.sun.jersey.glassfish.v3.osgi.jersey-gf-bundle (109)<http://localhost:8080/osgi/system/console/bundles/109>
com.sun.jersey.core.util,version=0.0.0 from com.sun.jersey.glassfish.v3.osgi.jersey-gf-bundle (109)<http://localhost:8080/osgi/system/console/bundles/109>
javax.jms,version=1.1.0 from org.glassfish.javax.jms (138)<http://localhost:8080/osgi/system/console/bundles/138>
INFO: javax.naming,version=0.0.0 from org.apache.felix.framework (0)<http://localhost:8080/osgi/system/console/bundles/0> -- Overwritten by Boot Delegation
javax.ws.rs,version=1.1.1 from javax.ws.rs.jsr311-api (94)<http://localhost:8080/osgi/system/console/bundles/94>
javax.ws.rs.core,version=1.1.1 from javax.ws.rs.jsr311-api (94)<http://localhost:8080/osgi/system/console/bundles/94>
javax.ws.rs.ext,version=1.1.1 from javax.ws.rs.jsr311-api (94)<http://localhost:8080/osgi/system/console/bundles/94>
javax.xml.bind,version=2.2.1 from jaxb-api (24)<http://localhost:8080/osgi/system/console/bundles/24>
INFO: javax.xml.datatype,version=0.0.0 from org.apache.felix.framework (0)<http://localhost:8080/osgi/system/console/bundles/0> -- Overwritten by Boot Delegation
INFO: javax.xml.transform,version=0.0.0 from org.apache.felix.framework (0)<http://localhost:8080/osgi/system/console/bundles/0> -- Overwritten by Boot Delegation
INFO: javax.xml.transform.stream,version=0.0.0 from org.apache.felix.framework (0)<http://localhost:8080/osgi/system/console/bundles/0> -- Overwritten by Boot Delegation
mil.jfcom.jcms.schemas,version=0.0.0 from mil.jfcom.jcms.osgi.schemas (260)<http://localhost:8080/osgi/system/console/bundles/260>
org.osgi.framework,version=1.5.0 from org.apache.felix.framework (0)<http://localhost:8080/osgi/system/console/bundles/0>
org.osgi.service.cm,version=1.3.0 from org.apache.felix.configadmin (171)<http://localhost:8080/osgi/system/console/bundles/171>
org.osgi.util.tracker,version=1.4.0 from org.apache.felix.framework (0)<http://localhost:8080/osgi/system/console/bundles/0>
My exception:
com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java type, class java.lang.String, and MIME media type, text/plain;charset=iso-8859-1, was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:526)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:491)
at mil.jfcom.jcms.osgi.framework.event.JCMSTimerTask.run(JCMSTimerTask.java:93)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
My client code. This is the pojo client. The OSGi bundle code is basically the same, but embedded in some other code within the bundle.
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import javax.ws.rs.core.MediaType;
public class JerseyClient
{
private WebResource resource = null;
public JerseyClient(String url)
{
try
{
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(String.class);
Client client = Client.create(cc);
resource = client.resource(url);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public String getResponse()
{
ClientResponse response = resource.accept(MediaType.APPLICATION_XML).get(ClientResponse.class);
String xml = response.getEntity(String.class); // This is the line that bombs in OSGi
return xml;
}
public static void main(String args[])
{
JerseyClient c = new JerseyClient(args[0]);
String xml = c.getResponse();
System.out.println("Response: " + xml);
}
}
Thanks,
Larry