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