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)





Reply via email to