cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Udara Liyanage <udaraliyan...@gmail.com>
Subject Custom Response with complex types - Class nor any of its super class is known to this context
Date Mon, 07 Jul 2014 18:22:33 GMT
Hi,

I have a REST API which sends JSON as response. I want to implement a
proper format for all the REST API calls. *MyResponse* is the custom class
I implemented for the response.


@XmlRootElement
class MyResponse {
    private String message;
    private int code;
    private Object data;

// Geter and seters are removed to shorten the email
}


Below is the API method.

 @GET
    @Path("/cartridge/available/list")
    @Produces("application/json")
    @Consumes("application/json")
    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
    public Response getAvailableCartridges() throws RestAPIException {
        List<Cartridge> cartridges =
ServiceUtils.getAvailableCartridges(null, null, getConfigContext());
        Response.ResponseBuilder rb = Response.ok();
        MyResponse mr = new MyResponse();
        mr.setMessage("sucessess");
        mr.setCode(300);
        Cartridge cart = new Cartridge();
        cart.setName("test");
        *mr.setData(cart);*
        return
Response.ok().entity(mr).type(MediaType.APPLICATION_JSON).build();

    }

However above will end in below error.
 Please note that if I set some primitive types for "data", it works fine.

What should be done to resolve the issue?

*What are the best practices when implementing custom responses with
complex types. *

*Caused by: javax.xml.bind.JAXBException: class
org.apache.stratos.manager.dto.Cartridge nor any of its super class is
known to this context.*
    at
com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:246)
    at
com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:261)
    at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)
    at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:152)
    at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:340)
    at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:593)
    at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:324)
    at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
    at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
    at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:172)
    at
org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:488)
    at
org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:558)
    at
org.apache.cxf.jaxrs.provider.json.JSONProvider.writeTo(JSONProvider.java:378)
    ... 40 more
Caused by: javax.xml.bind.JAXBException: class
org.apache.stratos.manager.dto.Cartridge nor any of its super class is
known to this context.
    at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594)
    at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648)
    ... 50 more

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message