Hello,
I am using CXF 2.4.0 + Spring 3.0.5 to create JAX-RS services. In one case
I have a service for which I need to marshal a generic type. When I go
about doing this, I end up getting an exception like this:
[javax.xml.bind.JAXBException: class my.package.ArticleInfo nor any of its
super class is known to this context.]
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:318)
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:172)
at
org.apache.cxf.jaxrs.provider.JSONProvider.marshal(JSONProvider.java:387)
at
org.apache.cxf.jaxrs.provider.JSONProvider.marshal(JSONProvider.java:420)
at
org.apache.cxf.jaxrs.provider.JSONProvider.writeTo(JSONProvider.java:300)
at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:256)
at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:144)
at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:83)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:166)
at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:112)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:575)
My data types are:
@XmlRootElement(name = "resultsPage")
public class ResultsPage<T> {
int pageOffset;
int count;
}
@XmlRootElement(name = "resultsPage")
public class ArticlePage extends ResultsPage<ArticleInfo> {
// no extra fields here; just specializes the generic
}
@XmlRootElement(name = "resultsPage")
public class StaffPage extends ResultsPage<StaffInfo> {
// no extra fields here; just specializes the generic
}
How would I instruct CXF to include the classes ArticleInfo/StafInfo/etc
in the JAXBContext used to marshal/unmarshal the data?