You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Sergey Beryozkin <sb...@gmail.com> on 2014/07/07 23:43:31 UTC
Re: Custom Response with complex types - Class nor any of its super
class is known to this context
Hi, CC-ing to users,
This is really a JAXB related question, you'd add @XmlSeeAlso to the
base class, that would do as a start
Cheers, Sergey
On 07/07/14 19:22, Udara Liyanage wrote:
> 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
>
--
Sergey Beryozkin
Talend Community Coders
http://coders.talend.com/
Blog: http://sberyozkin.blogspot.com