cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
Date Mon, 03 Oct 2011 08:43:12 GMT
Hi,

I got confused a bit, as you did say

 >>>>>> In the stack trace, I see that JSONProvider is still used... Not
 >>>>>> my new instance... I guess CXF takes the first provider which is
 >>>>>> able to handle application/json MIME type?
 >>>>>>
 >>>>>> Moreover, I see this warning in log:
 >>>>>>
 >>>>>> org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
 >>>>>> ATTENTION: No resource methods have been found for resource
 >>>>>> class com.test.ExtendedJSONProvider

So the problem is, that for whatever reasons, a custom provider is not 
recognized when it's registered from Application.
Can you please try one of the following:
- try returning com.test.ExtendedJSONProvider.class from 
Application.getClasses() but not from Application.getSingletons(); or 
the other way around. I can see that either approach is being tested on 
the trunk but I'm not 100% sure that that works in 2.3.3 properly
- instead of using Application - try jaxrs.serviceClasses and 
jaxrs.providers init parameters - this is a temp step which may help to 
isolate the problem which may be to do with @Provider being still not 
visible.
- finally - create a simple bundle that can help demonstrating that the 
custom provider is not picked up - and please sent to me

thanks, Sergey

On 30/09/11 16:15, Sergey Beryozkin wrote:
> Hmm...
> Sorry, can you please double-check that ExtendedJSONProvider does not
> feature anyware in a stack trace ?
> I'll add a test on my own a bit later on, I have few tests where
> customized JAXB and JSON providers are used (these are effectively
> overriding default ones),
> Will get back to you asap - may be Monday
> Thanks, Sergey
>
> On 30/09/11 15:50, Muller, Anthony wrote:
>> Yep, classes are bundlized and deployed in an osgi environment.
>>
>> And yes, I imported "javax.ws.rs.ext". As I said, my provider is well
>> instantiated but JSONProvider seems to have an higher priority.
>>
>> Regards,
>> Anthony
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>> Sent: vendredi 30 septembre 2011 15:58
>> To: users@cxf.apache.org
>> Subject: Re: CXF 2.3.3 - JSON output -
>> java.lang.IllegalStateException: Invalid JSON namespace
>>
>> Hi
>>
>> I've checked that the code in CXF 2.3.3, CXF 2.4.2 and 2.5.0 that deals
>> with getting providers from Applications is identical and I have a test
>> where exception mappers are registered from CXFNonSpringJaxrsServlet and
>> Application.
>>
>> I'm wondering if it is an OSGI issue ? Do you have javax.ws.rs.ext
>> imported ?
>>
>>
>> On 30/09/11 11:23, Muller, Anthony wrote:
>>> Thanks for your help Sergey. Sorry, it's configured through an
>>> Application instance!
>>>
>>> Anthony
>>>
>>> -----Original Message-----
>>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>>> Sent: vendredi 30 septembre 2011 12:14
>>> To: users@cxf.apache.org
>>> Subject: Re: CXF 2.3.3 - JSON output -
>>> java.lang.IllegalStateException: Invalid JSON namespace
>>>
>>> That looks OK.
>>> How do you register it ? From Application instance or via servlet init
>>> params ? Give me more info please
>>>
>>> Cheers, Sergey
>>>
>>> On 30/09/11 11:10, Muller, Anthony wrote:
>>>> Yes, it's what I did. Do you see something wrong?
>>>>
>>>>
>>>> import javax.ws.rs.Consumes;
>>>> import javax.ws.rs.Produces;
>>>> import javax.ws.rs.ext.Provider;
>>>>
>>>> import org.apache.cxf.jaxrs.provider.JSONProvider;
>>>>
>>>> @Produces({"application/json"})
>>>> @Consumes({"application/json"})
>>>> @Provider
>>>> public class ExtendedJSONProvider extends JSONProvider {
>>>>
>>>> public ExtendedJSONProvider() {
>>>> setIgnoreNamespaces(true);
>>>> }
>>>> }
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>>>> Sent: vendredi 30 septembre 2011 12:02
>>>> To: users@cxf.apache.org
>>>> Subject: Re: CXF 2.3.3 - JSON output -
>>>> java.lang.IllegalStateException: Invalid JSON namespace
>>>>
>>>> Hi, yea it does, but as I said CXF (CXFNonSpringJaxrsServlet) does not
>>>> check superclasses for @Provider which will need to be fixed, so for
>>>> now
>>>> please add another @Provider to your custom provider and that will do -
>>>>
>>>> Cheers, Sergey
>>>>
>>>> On 30/09/11 10:47, Muller, Anthony wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> Are you sure that "org.apache.cxf.jaxrs.provider.JSONProvider"
>>>>> doesn't have the @Provider annotation?
>>>>>
>>>>> I found it in "cxf-2.3.3.jar" yet :-/
>>>>>
>>>>> Anthony
>>>>>
>>>>>
>>>>>
>>>>> -----Original Message-----
>>>>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>>>>> Sent: vendredi 30 septembre 2011 11:20
>>>>> To: users@cxf.apache.org
>>>>> Subject: Re: CXF 2.3.3 - JSON output -
>>>>> java.lang.IllegalStateException: Invalid JSON namespace
>>>>>
>>>>> Hi Anthony
>>>>>
>>>>> How do you register it, using jaxrs.providers parameter ?
>>>>> A custom provider should be preferred to a default one.
>>>>> That warning suggests that you probably use a jaxrs.serviceClasses
>>>>> parameter ?
>>>>>
>>>>> Or do use register it from the Application implementation ? In that
>>>>> case
>>>>> this custom provider needs to have a JAX-RS @Provider annotation,
>>>>> for it to be distinguished from other singletons. JSONProvider does
>>>>> have
>>>>> it - but in 2.3.3 no checks are made on superclasses - that will
>>>>> need to
>>>>> be improved in CXF
>>>>>
>>>>> Let me know please if that works
>>>>>
>>>>> Cheers, Sergey.
>>>>>
>>>>> On 30/09/11 09:38, Muller, Anthony wrote:
>>>>>> Hey Sergey,
>>>>>>
>>>>>> I'm trying to follow your advice and I inherited from JSONProvider
>>>>>> class and just set "ignoreNamespace" to true.
>>>>>>
>>>>>> At the beginning, I didn't inherit from JSONProvider, but only
>>>>>> instantiated this class, set the "ignoreNamespace" property and
>>>>>> add it as a provider: however I get an exception because this
>>>>>> provider was already registered (by CXF itself I guess).
>>>>>>
>>>>>> SO, I add the provider bellow, but I still have the same exception
>>>>>> about namespace :(
>>>>>>
>>>>>> In the stack trace, I see that JSONProvider is still used... Not
>>>>>> my new instance... I guess CXF takes the first provider which is
>>>>>> able to handle application/json MIME type?
>>>>>>
>>>>>> Moreover, I see this warning in log:
>>>>>>
>>>>>> org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
>>>>>> ATTENTION: No resource methods have been found for resource
>>>>>> class com.test.ExtendedJSONProvider
>>>>>>
>>>>>> The code of the inherited JSONProvider.
>>>>>>
>>>>>> import javax.ws.rs.Consumes;
>>>>>> import javax.ws.rs.Produces;
>>>>>> import javax.ws.rs.ext.Provider;
>>>>>>
>>>>>> import org.apache.cxf.jaxrs.provider.JSONProvider;
>>>>>>
>>>>>> @Produces({"application/json"})
>>>>>> @Consumes({"application/json"})
>>>>>> @Provider
>>>>>> public class ExtendedJSONProvider extends JSONProvider {
>>>>>>
>>>>>> public ExtendedJSONProvider() {
>>>>>> setIgnoreNamespaces(true);
>>>>>> }
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Thanks for help!
>>>>>>
>>>>>> Cheers,
>>>>>> Anthony
>>>>>>
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>>>>>> Sent: mardi 27 septembre 2011 12:36
>>>>>> To: users@cxf.apache.org
>>>>>> Subject: Re: CXF 2.3.3 - JSON output -
>>>>>> java.lang.IllegalStateException: Invalid JSON namespace
>>>>>>
>>>>>> Hi
>>>>>>
>>>>>> The default Jettison provider expects a namespace-to-prefix map
>>>>>> set up.
>>>>>> If you don't realy need the prefixes on the receiving end then the
>>>>>> simplest option is to configure JSONProvider with an
>>>>>> "ignoreNamespaces"
>>>>>> property, otherwise you'd need to provide a map, here is more info:
>>>>>>
>>>>>> http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-ConfiguringJSONprovider
>>>>>>
>>>>>>
>>>>>> The thing is how to configure it given that you are using
>>>>>> CXFNonSpringJAXRSServlet.
>>>>>>
>>>>>> One option is to extend JSONProvider and only set
>>>>>> "ignoreNamespace" or
>>>>>> "namespaceMap" property as needed on the superclass. And register
it
>>>>>> with the servlet using a jaxrs.providers parameter.
>>>>>>
>>>>>> Another option is try registering Jackson.
>>>>>>
>>>>>> I should probably do some enhancement for users be able to set simple
>>>>>> properties on providers registered from web.xml...
>>>>>>
>>>>>> Cheers, Sergey
>>>>>>
>>>>>>
>>>>>> On 27/09/11 10:41, Muller, Anthony wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> I have an issue when I try to get a JSON output, using a JAXB
>>>>>>> object, of my REST webservice. (XML output is ok.)
>>>>>>>
>>>>>>> My webservice is running without using Spring.
>>>>>>>
>>>>>>> Can you help me? I don't know how to fix it despite browsing
many
>>>>>>> websites from Google.
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Anthony
>>>>>>>
>>>>>>>
>>>>>>> The exception is:
>>>>>>> javax.ws.rs.WebApplicationException:
>>>>>>> java.lang.IllegalStateException: Invalid JSON namespace:
>>>>>>> http://www.w3.org/2001/XMLSchema-instance
>>>>>>> at
>>>>>>> org.apache.cxf.jaxrs.provider.JSONProvider.writeTo(JSONProvider.java:291)
>>>>>>>
>>>>>>> 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:255)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>>>>>>>
>>>>>>> at
>>>>>>> com.sap.bip.rs.server.servlet.BIPServletController.invoke(BIPServletController.java:90)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
>>>>>>>
>>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
>>>>>>> at
>>>>>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>>>>>>>
>>>>>>> at java.lang.Thread.run(Thread.java:722)
>>>>>>> Caused by: java.lang.IllegalStateException: Invalid JSON
>>>>>>> namespace: http://www.w3.org/2001/XMLSchema-instance
>>>>>>> at
>>>>>>> org.codehaus.jettison.mapped.MappedNamespaceConvention.getJSONNamespace(MappedNamespaceConvention.java:248)
>>>>>>>
>>>>>>> at
>>>>>>> org.codehaus.jettison.mapped.MappedNamespaceConvention.createAttributeKey(MappedNamespaceConvention.java:233)
>>>>>>>
>>>>>>> at
>>>>>>> org.codehaus.jettison.mapped.MappedXMLStreamWriter.writeAttribute(MappedXMLStreamWriter.java:216)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.staxutils.DelegatingXMLStreamWriter.writeAttribute(DelegatingXMLStreamWriter.java:71)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.jaxrs.provider.JSONUtils$IgnoreContentJettisonWriter.writeAttribute(JSONUtils.java:204)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.staxutils.DelegatingXMLStreamWriter.writeAttribute(DelegatingXMLStreamWriter.java:71)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.output.XMLStreamWriterOutput.attribute(XMLStreamWriterOutput.java:122)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.attribute(XMLSerializer.java:403)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.writeXsiNilTrue(XMLSerializer.java:764)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:91)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:54)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:157)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:141)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:561)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:290)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:462)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:161)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.jaxrs.provider.JSONProvider.marshal(JSONProvider.java:344)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.jaxrs.provider.JSONProvider.marshal(JSONProvider.java:377)
>>>>>>>
>>>>>>> at
>>>>>>> org.apache.cxf.jaxrs.provider.JSONProvider.writeTo(JSONProvider.java:283)
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Mime
View raw message