users@jersey.java.net

MIME media type, application/xml, was not found - exception

From: Rajesh T <Rajesh.Thiagarajan_at_Sun.COM>
Date: Fri, 11 Apr 2008 19:14:53 +0530

Hi,

        I am trying to return a JAXB Object from the sample program. I tried
to modifying the Samples bundles with jersy

  Here is the exception I am getting. Any help appreciated.


Exception :

PWC1406: Servlet.service() for servlet WSRP REST Interface threw
exceptionjava.lang.IllegalArgumentException: A message body writer
for Java type, class
com.sun.portal.wsrp.common.stubs.v2.RegistrationContext, and MIME
media type, application/xml, was not found at
com.sun.ws.rest.impl.application.MessageBodyFactory.getMessageBodyWriter
(MessageBodyFactory.java:153) at
com.sun.ws.rest.spi.container.AbstractContainerResponse.writeEntity
(AbstractContainerResponse.java:257) at
com.sun.ws.rest.spi.container.AbstractContainerResponse.writeEntity
(AbstractContainerResponse.java:235) at
com.sun.ws.rest.impl.container.servlet.HttpResponseAdaptor.commitAll
(HttpResponseAdaptor.java:127) at
com.sun.ws.rest.spi.container.servlet.ServletContainer.service
(ServletContainer.java:141) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at org.apache.catalina.core.ApplicationFilterChain.servletService
(ApplicationFilterChain.java:411) at
org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:290) at
org.apache.catalina.core.StandardContextValve.invokeInternal
(StandardContextValve.java:271) at
org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:202) at
org.apache.catalina.core.StandardPipeline.doInvoke
(StandardPipeline.java:632) at
org.apache.catalina.core.StandardPipeline.doInvoke
(StandardPipeline.java:577) at
com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:206) at
org.apache.catalina.core.StandardPipeline.doInvoke
(StandardPipeline.java:632) at
org.apache.catalina.core.StandardPipeline.doInvoke
(StandardPipeline.java:577) at
org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:571) at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:
1080) at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:150) at
org.apache.catalina.core.StandardPipeline.doInvoke
(StandardPipeline.java:632) at
org.apache.catalina.core.StandardPipeline.doInvoke
(StandardPipeline.java:577) at
org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:571) at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:
1080) at org.apache.coyote.tomcat5.CoyoteAdapter.service
(CoyoteAdapter.java:272) at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdap
ter(DefaultProcessorTask.java:637) at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(
DefaultProcessorTask.java:568) at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process
(DefaultProcessorTask.java:813) at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcesso
rTask(DefaultReadTask.java:341) at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask
(DefaultReadTask.java:263) at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask
(DefaultReadTask.java:214) at
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask
(PortUnificationPipeline.java:380) at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:
265) at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run
(SSLWorkerThread.java:106)




Here is the program :

import com.sun.portal.wsrp.common.stubs.v2.RegistrationContext;
import javax.ws.rs.ConsumeMime;
import javax.ws.rs.GET;
import javax.ws.rs.ProduceMime;
import javax.ws.rs.Path;
@Path("/registration")
public class RegistrationRS {

     @GET
     @ProduceMime({"application/json", "application/xml"})
      public RegistrationContext getRegistration (){
       RegistrationContext regContext = new RegistrationContext();
        regContext.setRegistrationHandle("dummy-rest");
      regContext.setRegistrationState("valid".getBytes());
      return regContext;
     }
}


Here is the JAXBObject :


package com.sun.portal.wsrp.common.stubs.v2;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;


/**
  * <p>Java class for RegistrationContext complex type.
  *
  * <p>The following schema fragment specifies the expected content
contained within this class.
  *
  * <pre>
  * &lt;complexType name="RegistrationContext">
  * &lt;complexContent>
  * &lt;extension base="{urn:oasis:names:tc:wsrp:v2:types}
RegistrationState">
  * &lt;sequence>
  * &lt;element name="registrationHandle" type="{http://
www.w3.org/2001/XMLSchema}string"/>
  * &lt;/sequence>
  * &lt;/extension>
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
  *
  *
  */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RegistrationContext", propOrder = {
     "registrationHandle"
})
public class RegistrationContext
     extends RegistrationState
{

     @XmlElement(required = true)
     protected String registrationHandle;

     /**
      * Gets the value of the registrationHandle property.
      *
      * @return
      * possible object is
      * {_at_link String }
      *
      */
     public String getRegistrationHandle() {
         return registrationHandle;
     }

     /**
      * Sets the value of the registrationHandle property.
      *
      * @param value
      * allowed object is
      * {_at_link String }
      *
      */
     public void setRegistrationHandle(String value) {
         this.registrationHandle = value;
     }

}



Here is the Provider :



package com.sun.portal.wsrp.producer.registration.impl;

import com.sun.portal.wsrp.common.stubs.v2.RegistrationContext;
import com.sun.ws.rest.impl.json.JSONJAXBContext;
import com.sun.ws.rest.spi.service.ContextResolver;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.xml.bind.JAXBContext;
import javax.ws.rs.ext.Provider;


@Provider
public final class WSRPContextResolver implements
ContextResolver<JAXBContext> {

     private final JAXBContext context;

     private final Set<Class> types;

     private final Class[] cTypes = {RegistrationContext.class};

     public WSRPContextResolver() throws Exception {
         Map<String, Object> props = new HashMap<String, Object>();
         props.put(JSONJAXBContext.JSON_NOTATION, "BADGERFISH");
         props.put(JSONJAXBContext.JSON_ROOT_UNWRAPPING, Boolean.FALSE);
         this.types = new HashSet(Arrays.asList(cTypes));
         this.context = new JSONJAXBContext(cTypes, props);
     }

     public JAXBContext getContext(Class<?> objectType) {
         return (types.contains(objectType)) ? context : null;
     }
}

regards
Rajesh T