cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sergey.beryoz...@iona.com>
Subject Re: Exception about "*** nor any of its super class is known to this context"
Date Thu, 20 Aug 2009 13:41:18 GMT

I added 'ether' there without completing the sentence... If you parse JSON
manually on the client side then you may want to specify an empty prefix for
"http://www.w3.org/2001/XMLSchema-instance"

cheers, Sergey


Sergey Beryozkin wrote:
> 
> Hi Sam
> 
> At the moment you need to explicitly register an
> org.apache.cxf.jaxrs.provider.JSONProvider bean and configure it with a
> namespaceMap map property, see here for example :
> 
> http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/beans.xml
> 
> This map should include 
> "http://www.w3.org/2001/XMLSchema-instance" as a key and either "xsi" as a
> value.
> 
> New JSON providers such as AegisJSONProvider and DataBindingJSONProvider
> actually do it by default - I'll update a JSONProvider to do it too - it
> really won't harm, but in meantime please do it manually...
> 
> cheers, Sergey
> 
> 
> Sam.Wang wrote:
>> 
>> Hi dkulp:
>> 
>> Thanks your reply!
>> I was tried your method, however I get an exception when the response
>> message be serialized in JAXRSOutInterceptor class. I debug it and find
>> out the detailed exception info.
>> 
>> javax.ws.rs.WebApplicationException: java.lang.IllegalStateException:
>> Invalid JSON namespace: http://www.w3.org/2001/XMLSchema-instance
>> 
>> I only added the annotation in CRUDResponse class, just like this:
>> 
>> @XmlRootElement(name = "response")
>> @XmlSeeAlso( { Apple.class })
>> public class CRUDResponse <T extends Object> {
>> 
>> Are there others specific reasons in my code?
>> thanks, Sam.
>> 
>> 
>> dkulp wrote:
>>> 
>>> 
>>> Well, the basic reason is that many of the generic types get compiled
>>> away and 
>>> thus are not able to be discovered via reflection.   In your case:
>>> 
>>> new CRUDResponse<Apple>(apple)
>>> 
>>> The "Apple" gets compiled away to just Object.   When we create the 
>>> JAXBContext, Apple doesn't get added and thus it's now able to write it.  
>>> The 
>>> normal way around it is to add @XmlSeeAlso annotations to places JAXB
>>> would 
>>> look.   In your case, I THINK if you add an XmlSeeAlso annotation to the 
>>> CRUDResponse that points at all the objects that it could hold, you
>>> should be 
>>> OK.
>>> 
>>> Dan
>>> 
>>> 
>>> On Mon August 17 2009 6:11:59 am Sam.Wang wrote:
>>>> I found this issue today, but I don't understand why?
>>>>
>>>> 2009-8-17 18:05:09 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider
>>>> handleJAXBException
>>>> Warning: javax.xml.bind.MarshalException
>>>>  - with linked exception:
>>>> [javax.xml.bind.JAXBException: class com.demo.Apple nor any of its
>>>> super
>>>> class is known to this context.]
>>>>
>>>> Following is my demo code:
>>>>
>>>> @XmlRootElement(name = "apple")
>>>> public class Apple {
>>>>
>>>> 	private int id = -1;
>>>> 	private String name;
>>>> 	private String color;
>>>> 	private int size;
>>>>
>>>>         set...
>>>>         get...
>>>> }
>>>>
>>>>
>>>> @XmlRootElement(name = "response")
>>>> public class CRUDResponse<T extends Object> {
>>>>
>>>> 	private int total;
>>>> 	private int limit;
>>>> 	private int start;
>>>> 	private boolean success = true;
>>>> 	private T entity;
>>>> 	private List<T> entityList;
>>>>
>>>>         set...
>>>>         get...
>>>> }
>>>>
>>>> 	public Response getApple(String id) throws Exception {
>>>> 		Apple apple = new AppleServiceImpl().getApple(Integer.parseInt(id));
>>>> 		return Response.ok(new CRUDResponse<Apple>(apple)).build();
>>>> 	}
>>> 
>>> -- 
>>> Daniel Kulp
>>> dkulp@apache.org
>>> http://www.dankulp.com/blog
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Exception-about-%22***-nor-any-of-its-super-class-is-known-to-this-context%22-tp25004234p25062305.html
Sent from the cxf-user mailing list archive at Nabble.com.


Mime
View raw message