-
Bug
-
Resolution: Cannot Reproduce
-
Major
-
2.1.0.GA
-
JBoss AS6 Final
I'm developping a sample JAX-RS/CDI based application, that I deploy into JBoss AS 6.0 (Final). I do not add any dependency, all my code relies on the artefacts provided by the server. So, I'm running with RESTEasy 2.1.0.GA.
I have a few entities that are transformed into 'representation' objects that have JAXB annotations on them.
Here is an extract of my CustomerResource :
@Stateless
@Path(CustomerResource.URI_BASE)
@Consumes(MediaType.APPLICATION_XML)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class CustomerResource {
@GET
@Path("{id}")
@Formatted
public Response getCustomer(@PathParam("id") Integer id,
@Context UriInfo uriInfo, @Context HttpServletRequest request) {
...
}
@GET
@Path("{id}")
@Produces({ "text/x-vcard" })
public Response getCustomerAsVCard(@PathParam("id") Integer id, @Context UriInfo uriInfo) {
...
}
}
The response objects have an instance of 'CustomerRepresentation' as an entity.
@XmlRootElement(name = "customer")
@XmlType(propOrder = { "firstName", "lastName", "address", "orders", "selfLinks" })
public class CustomerRepresentation {
...
}
And the custom Customer MessageBodyWriter :
@Provider
@Produces("text/x-vcard")
public class CustomerVCardMessageBodyWriter implements
MessageBodyWriter<CustomerRepresentation> {
...
}
Yet, when the request header 'accept' is set to 'text/x-vcard', the right CustomerResource method is called, but then I get the following error:
13:55:11,942 WARN [org.jboss.resteasy.core.SynchronousDispatcher] Failed executing GET /customers/1: org.jboss.resteasy.plugins.providers.jaxb.JAXBMarshalException: Could not find JAXBContextFinder for media type: text/x-vcard at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.findJAXBContext(AbstractJAXBProvider.java:50) [:6.0.0.Final] at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:127) [:6.0.0.Final] at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.writeTo(AbstractJAXBProvider.java:103) [:6.0.0.Final] at org.jboss.resteasy.core.interception.MessageBodyWriterContextImpl.proceed(MessageBodyWriterContextImpl.java:117) [:6.0.0.Final] at org.jboss.resteasy.plugins.interceptors.encoding.GZIPEncodingInterceptor.write(GZIPEncodingInterceptor.java:48) [:6.0.0.Final] at org.jboss.resteasy.core.interception.MessageBodyWriterContextImpl.proceed(MessageBodyWriterContextImpl.java:123) [:6.0.0.Final] at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:222) [:6.0.0.Final] at org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse(SynchronousDispatcher.java:563) [:6.0.0.Final] at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:484) [:6.0.0.Final]
Putting breakpoints in all the MBW methods shows that this class is not called, event though it was properly registered during app startup:
13:53:21,020 INFO [org.jboss.resteasy.integration.deployers.ResteasyIntegrationDeployer] *** Adding JAX-RS provider classes: org.bytesparadise.tools.jaxrs.sample.services.providers.CustomerVCardMessageBodyWriter
It seems that since the returned object has JAXB annotation, the built-in JAXB provider is picked up before my custom MBW.