Ok, thanks Sergey. Anthony
-----Original Message----- From: Sergey Beryozkin [mailto:[email protected]] Sent: lundi 3 octobre 2011 12:15 To: [email protected] 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:[email protected]] > Sent: lundi 3 octobre 2011 11:43 > To: [email protected] > 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:[email protected]] >> Sent: lundi 3 octobre 2011 10:43 >> To: [email protected] >> 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:[email protected]] >>>> Sent: vendredi 30 septembre 2011 15:58 >>>> To: [email protected] >>>> 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:[email protected]] >>>>> Sent: vendredi 30 septembre 2011 12:14 >>>>> To: [email protected] >>>>> 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:[email protected]] >>>>>> Sent: vendredi 30 septembre 2011 12:02 >>>>>> To: [email protected] >>>>>> 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:[email protected]] >>>>>>> Sent: vendredi 30 septembre 2011 11:20 >>>>>>> To: [email protected] >>>>>>> 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:[email protected]] >>>>>>>> Sent: mardi 27 septembre 2011 12:36 >>>>>>>> To: [email protected] >>>>>>>> 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) >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
