You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Jeff Wang <je...@originate.com> on 2011/07/21 02:47:19 UTC

Multipart and WebClient

I need to take an incoming file and send it to a third party.  For
memory purposes, I'm dealing with InputStreams on the fly.  I've copied
the code essentially from the jaxrs Multipart page on the CXF website,
from the section uploading files....

WebClient client = WebClient.create(<endpoint removed>)
	.accept(MediaType.APPLICATION_JSON)
	.type(MediaType.MULTIPART_FORM_DATA_TYPE);
ContentDisposition cd= new ContentDisposition("form-data; name=\"file\";
filename=\""+consult.getFilename()+"\"");
Attachment att = new Attachment("file", new ByteArrayInputStream(file),
cd);
MultipartBody body = new MultipartBody(att);
String resp = client.post(body, String.class);

However, when I run this code, I get:
No message body writer found for class : class
org.apache.cxf.jaxrs.ext.multipart.MultipartBody

Am I using the wrong class or did I not configure something correctly?
Any help would be greatly appreciated.

Thanks!
Jeff Wang

Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
I updated CXFNonSpringJaxrsServlet to support the injection of simple 
properties for service and Application classes, providers and 
interceptors, few people have asked about it, Carl-Eric, others, so it 
makes sense to add some simple support, ex:
<init>
<param-name>jaxrs.interceptors</param-name>
<param-value>
   org.bar.MyClass
   (property=value, property2=value)
</param-value>
</init>

MyClass is expected to have setProperty and setproeprt1 methods, with a 
primitive or List class type

Cheers, Sergey

On 27/09/11 11:57, Muller, Anthony wrote:
> Thanks very much Sergey, I will try this.
>
> Regards,
> 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)
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
Thanks very much Sergey, I will try this.

Regards,
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)


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
Ok, thanks Sergey.

Anthony

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
Sent: lundi 3 octobre 2011 12:15
To: users@cxf.apache.org
Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

I got that fixed, only xsi:type was blocked, now both xsi:type and
xsi:nil will be blocked if that property is set to false

Cheers, Sergey

On 03/10/11 10:51, Muller, Anthony wrote:
> Hello,
>
> I tried to remove:
>
> final Map<String, String>   namespaces = new HashMap<String, String>();
> namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
> setNamespaceMap(namespaces);
>
> And to add:
>
> setWriteXsiType(false);
>
> However, it failed... (same error than previous one)
>
> Regards,
> Anthony
>
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: lundi 3 octobre 2011 11:43
> To: users@cxf.apache.org
> Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
>
> Hi
>
> That is great, just for your info, "writeXsiType" property, if set to
> false, can probably block that xsi:null...
>
> You may also want to experiment with Jackson which is probably is less
> dependent on the way JAXB operates, as opposed to Jettison
>
> Cheers, Sergey
>
>
> On 03/10/11 10:36, Muller, Anthony wrote:
>> Hey Sergey!
>>
>> I found a solution to my issue after many attempts and after be sure that my provider was called by CXF.
>>
>> I tuned the OSGi imported packages too.
>>
>> I think the problem was for interpretation of XSD Nillable value. Even if I set 'ignoreNamespaces' to 'true', nillable values are formatted like this in JSON: "@xsi.nil"
>>
>> Anyway, thanks for your help,
>> Anthony
>>
>>
>> @Produces({"application/json"})
>> @Consumes({"application/json"})
>> @Provider
>> public class ExtendedJSONProvider extends JSONProvider {
>>
>>           public ExtendedJSONProvider() {
>>                   setIgnoreNamespaces(true);
>>                   final Map<String, String>   namespaces = new HashMap<String, String>();
>>                   namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
>>                   setNamespaceMap(namespaces);
>>           }
>> }
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>> Sent: lundi 3 octobre 2011 10:43
>> To: users@cxf.apache.org
>> Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
>>
>> 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)
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
I got that fixed, only xsi:type was blocked, now both xsi:type and 
xsi:nil will be blocked if that property is set to false

Cheers, Sergey

On 03/10/11 10:51, Muller, Anthony wrote:
> Hello,
>
> I tried to remove:
>
> final Map<String, String>   namespaces = new HashMap<String, String>();
> namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
> setNamespaceMap(namespaces);
>
> And to add:
>
> setWriteXsiType(false);
>
> However, it failed... (same error than previous one)
>
> Regards,
> Anthony
>
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: lundi 3 octobre 2011 11:43
> To: users@cxf.apache.org
> Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
>
> Hi
>
> That is great, just for your info, "writeXsiType" property, if set to
> false, can probably block that xsi:null...
>
> You may also want to experiment with Jackson which is probably is less
> dependent on the way JAXB operates, as opposed to Jettison
>
> Cheers, Sergey
>
>
> On 03/10/11 10:36, Muller, Anthony wrote:
>> Hey Sergey!
>>
>> I found a solution to my issue after many attempts and after be sure that my provider was called by CXF.
>>
>> I tuned the OSGi imported packages too.
>>
>> I think the problem was for interpretation of XSD Nillable value. Even if I set 'ignoreNamespaces' to 'true', nillable values are formatted like this in JSON: "@xsi.nil"
>>
>> Anyway, thanks for your help,
>> Anthony
>>
>>
>> @Produces({"application/json"})
>> @Consumes({"application/json"})
>> @Provider
>> public class ExtendedJSONProvider extends JSONProvider {
>>
>>           public ExtendedJSONProvider() {
>>                   setIgnoreNamespaces(true);
>>                   final Map<String, String>   namespaces = new HashMap<String, String>();
>>                   namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
>>                   setNamespaceMap(namespaces);
>>           }
>> }
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>> Sent: lundi 3 octobre 2011 10:43
>> To: users@cxf.apache.org
>> Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
>>
>> 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)
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
Hello,

I tried to remove:

final Map<String, String>  namespaces = new HashMap<String, String>();
namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
setNamespaceMap(namespaces);

And to add:

setWriteXsiType(false);

However, it failed... (same error than previous one)

Regards,
Anthony


-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
Sent: lundi 3 octobre 2011 11:43
To: users@cxf.apache.org
Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Hi

That is great, just for your info, "writeXsiType" property, if set to
false, can probably block that xsi:null...

You may also want to experiment with Jackson which is probably is less
dependent on the way JAXB operates, as opposed to Jettison

Cheers, Sergey


On 03/10/11 10:36, Muller, Anthony wrote:
> Hey Sergey!
>
> I found a solution to my issue after many attempts and after be sure that my provider was called by CXF.
>
> I tuned the OSGi imported packages too.
>
> I think the problem was for interpretation of XSD Nillable value. Even if I set 'ignoreNamespaces' to 'true', nillable values are formatted like this in JSON: "@xsi.nil"
>
> Anyway, thanks for your help,
> Anthony
>
>
> @Produces({"application/json"})
> @Consumes({"application/json"})
> @Provider
> public class ExtendedJSONProvider extends JSONProvider {
>
>          public ExtendedJSONProvider() {
>                  setIgnoreNamespaces(true);
>                  final Map<String, String>  namespaces = new HashMap<String, String>();
>                  namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
>                  setNamespaceMap(namespaces);
>          }
> }
>
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: lundi 3 octobre 2011 10:43
> To: users@cxf.apache.org
> Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
>
> 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)
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

That is great, just for your info, "writeXsiType" property, if set to 
false, can probably block that xsi:null...

You may also want to experiment with Jackson which is probably is less 
dependent on the way JAXB operates, as opposed to Jettison

Cheers, Sergey


On 03/10/11 10:36, Muller, Anthony wrote:
> Hey Sergey!
>
> I found a solution to my issue after many attempts and after be sure that my provider was called by CXF.
>
> I tuned the OSGi imported packages too.
>
> I think the problem was for interpretation of XSD Nillable value. Even if I set 'ignoreNamespaces' to 'true', nillable values are formatted like this in JSON: "@xsi.nil"
>
> Anyway, thanks for your help,
> Anthony
>
>
> @Produces({"application/json"})
> @Consumes({"application/json"})
> @Provider
> public class ExtendedJSONProvider extends JSONProvider {
>
>          public ExtendedJSONProvider() {
>                  setIgnoreNamespaces(true);
>                  final Map<String, String>  namespaces = new HashMap<String, String>();
>                  namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
>                  setNamespaceMap(namespaces);
>          }
> }
>
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: lundi 3 octobre 2011 10:43
> To: users@cxf.apache.org
> Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace
>
> 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)
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
Hey Sergey!

I found a solution to my issue after many attempts and after be sure that my provider was called by CXF.

I tuned the OSGi imported packages too.

I think the problem was for interpretation of XSD Nillable value. Even if I set 'ignoreNamespaces' to 'true', nillable values are formatted like this in JSON: "@xsi.nil"

Anyway, thanks for your help,
Anthony


@Produces({"application/json"})
@Consumes({"application/json"})
@Provider
public class ExtendedJSONProvider extends JSONProvider {

        public ExtendedJSONProvider() {
                setIgnoreNamespaces(true);
                final Map<String, String> namespaces = new HashMap<String, String>();
                namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
                setNamespaceMap(namespaces);
        }
}


-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
Sent: lundi 3 octobre 2011 10:43
To: users@cxf.apache.org
Subject: Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

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)
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)
>>>>>
>>>>
>>>
>>
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
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)
>>>>
>>>
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)
>>>>
>>>
>>
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
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)
>>>
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)
>>>
>>
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
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)
>>
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)
>>
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
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)
>


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)
>


RE: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
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)


Re: CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by Sergey Beryozkin <sb...@gmail.com>.
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)


CXF 2.3.3 - JSON output - java.lang.IllegalStateException: Invalid JSON namespace

Posted by "Muller, Anthony" <an...@sap.com>.
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)

Re: Multipart and WebClient

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi,
> For some reason, I removed the .accept line, built, it didn't work, put
> it back in, built, and it worked.  I have absolutely no idea what was
> different.  There must be  ghosts in my machine...
> 
Cool, thanks for the confirmation
cheers, Sergey


> Thanks for the help.
> 
> Jeff
> 
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com] 
> Sent: Thursday, July 21, 2011 3:07 AM
> To: users@cxf.apache.org
> Subject: Re: Multipart and WebClient
> 
> Hi,
> 
>> I need to take an incoming file and send it to a third party.  For 
>> memory purposes, I'm dealing with InputStreams on the fly.  I've 
>> copied the code essentially from the jaxrs Multipart page on the CXF 
>> website, from the section uploading files....
>>
>> WebClient client = WebClient.create(<endpoint removed>)
>> 	.accept(MediaType.APPLICATION_JSON)
>> 	.type(MediaType.MULTIPART_FORM_DATA_TYPE);
>> ContentDisposition cd= new ContentDisposition("form-data; 
>> name=\"file\"; filename=\""+consult.getFilename()+"\"");
>> Attachment att = new Attachment("file", new 
>> ByteArrayInputStream(file), cd); MultipartBody body = new 
>> MultipartBody(att); String resp = client.post(body, String.class);
>>
>> However, when I run this code, I get:
>> No message body writer found for class : class 
>> org.apache.cxf.jaxrs.ext.multipart.MultipartBody
>>
>> Am I using the wrong class or did I not configure something correctly?
>> Any help would be greatly appreciated.
> 
> Something is interfering, the above code looks fine - I updated one of
> the existing tests (client part only) and did not get this exception.
> 
> I can see the Message.properties resource 'losing' a content-type value
> which was passed to it during the exception handling, needs to be fixed,
> but I think something else is interefing.
> By the way, default JSONProvider does not handle Strings...
> 
> If you can get CXF source and put a breakpoint in
> MulipartProvider.isWriteable then it would provide an answer -
> alternatively please create a test project and attach it to JIRA...
> 
> 
> Cheers, Sergey
>> Thanks!
>> Jeff Wang
> 


RE: Multipart and WebClient

Posted by Jeff Wang <je...@originate.com>.
For some reason, I removed the .accept line, built, it didn't work, put
it back in, built, and it worked.  I have absolutely no idea what was
different.  There must be  ghosts in my machine...

Thanks for the help.

Jeff

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com] 
Sent: Thursday, July 21, 2011 3:07 AM
To: users@cxf.apache.org
Subject: Re: Multipart and WebClient

Hi,

> I need to take an incoming file and send it to a third party.  For 
> memory purposes, I'm dealing with InputStreams on the fly.  I've 
> copied the code essentially from the jaxrs Multipart page on the CXF 
> website, from the section uploading files....
> 
> WebClient client = WebClient.create(<endpoint removed>)
> 	.accept(MediaType.APPLICATION_JSON)
> 	.type(MediaType.MULTIPART_FORM_DATA_TYPE);
> ContentDisposition cd= new ContentDisposition("form-data; 
> name=\"file\"; filename=\""+consult.getFilename()+"\"");
> Attachment att = new Attachment("file", new 
> ByteArrayInputStream(file), cd); MultipartBody body = new 
> MultipartBody(att); String resp = client.post(body, String.class);
> 
> However, when I run this code, I get:
> No message body writer found for class : class 
> org.apache.cxf.jaxrs.ext.multipart.MultipartBody
> 
> Am I using the wrong class or did I not configure something correctly?
> Any help would be greatly appreciated.

Something is interfering, the above code looks fine - I updated one of
the existing tests (client part only) and did not get this exception.

I can see the Message.properties resource 'losing' a content-type value
which was passed to it during the exception handling, needs to be fixed,
but I think something else is interefing.
By the way, default JSONProvider does not handle Strings...

If you can get CXF source and put a breakpoint in
MulipartProvider.isWriteable then it would provide an answer -
alternatively please create a test project and attach it to JIRA...


Cheers, Sergey
> Thanks!
> Jeff Wang


Re: Multipart and WebClient

Posted by Sergey Beryozkin <sb...@gmail.com>.
Sent a message from Thunderbird and Google mail shows as if I sent 3
messages in a row ,
sorry if it's the case

On Thu, Jul 21, 2011 at 11:06 AM, Sergey Beryozkin <sb...@gmail.com> wrote:
> Hi,
>
>> I need to take an incoming file and send it to a third party.  For
>> memory purposes, I'm dealing with InputStreams on the fly.  I've copied
>> the code essentially from the jaxrs Multipart page on the CXF website,
>> from the section uploading files....
>>
>> WebClient client = WebClient.create(<endpoint removed>)
>>        .accept(MediaType.APPLICATION_JSON)
>>        .type(MediaType.MULTIPART_FORM_DATA_TYPE);
>> ContentDisposition cd= new ContentDisposition("form-data; name=\"file\";
>> filename=\""+consult.getFilename()+"\"");
>> Attachment att = new Attachment("file", new ByteArrayInputStream(file),
>> cd);
>> MultipartBody body = new MultipartBody(att);
>> String resp = client.post(body, String.class);
>>
>> However, when I run this code, I get:
>> No message body writer found for class : class
>> org.apache.cxf.jaxrs.ext.multipart.MultipartBody
>>
>> Am I using the wrong class or did I not configure something correctly?
>> Any help would be greatly appreciated.
>
> Something is interfering, the above code looks fine - I updated one of the
> existing tests (client part only) and did not get this exception.
>
> I can see the Message.properties resource 'losing' a content-type value
> which was passed to it during the exception handling, needs to be fixed, but
> I think something else is interefing.
> By the way, default JSONProvider does not handle Strings...
>
> If you can get CXF source and put a breakpoint in
> MulipartProvider.isWriteable then it would provide an answer - alternatively
> please create a test project and attach it to JIRA...
>
>
> Cheers, Sergey
>>
>> Thanks!
>> Jeff Wang
>
>



-- 
Sergey Beryozkin

http://sberyozkin.blogspot.com
Talend - http://www.talend.com

Re: Multipart and WebClient

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi,

> I need to take an incoming file and send it to a third party.  For
> memory purposes, I'm dealing with InputStreams on the fly.  I've copied
> the code essentially from the jaxrs Multipart page on the CXF website,
> from the section uploading files....
> 
> WebClient client = WebClient.create(<endpoint removed>)
> 	.accept(MediaType.APPLICATION_JSON)
> 	.type(MediaType.MULTIPART_FORM_DATA_TYPE);
> ContentDisposition cd= new ContentDisposition("form-data; name=\"file\";
> filename=\""+consult.getFilename()+"\"");
> Attachment att = new Attachment("file", new ByteArrayInputStream(file),
> cd);
> MultipartBody body = new MultipartBody(att);
> String resp = client.post(body, String.class);
> 
> However, when I run this code, I get:
> No message body writer found for class : class
> org.apache.cxf.jaxrs.ext.multipart.MultipartBody
> 
> Am I using the wrong class or did I not configure something correctly?
> Any help would be greatly appreciated.

Something is interfering, the above code looks fine - I updated one of 
the existing tests (client part only) and did not get this exception.

I can see the Message.properties resource 'losing' a content-type value 
which was passed to it during the exception handling, needs to be fixed, 
but I think something else is interefing.
By the way, default JSONProvider does not handle Strings...

If you can get CXF source and put a breakpoint in 
MulipartProvider.isWriteable then it would provide an answer - 
alternatively please create a test project and attach it to JIRA...


Cheers, Sergey
> Thanks!
> Jeff Wang