Hi
On 08/12/13 18:45, Jose María Zaragoza wrote:
I don't know if
<property name="ignoreNamespaces" value="true"/>
is enough for you ( it wasn't in my case )
what exactly did not work ? Oh I think I know, this property was not
having an effect in case of the qualified attributes, as you reported in
the other email ? I can get it fixed easily
By the way, setting JSONElement outDropElements is another option, one
would set a "{http://myns}*":"*" pair, though unless other
transformations are needed using 'ignoreNamespaces' is simpler
Sergey
2013/12/8 Alex O'Ree <[email protected]>:
That did it! thanks for the help. Here's the relative parts of beans.xml
<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable" >
<entry key="urn:uddi-org:api_v3" value="urn:uddi-org:api_v3"/>
</util:map>
<jaxrs:server id="inquiryRestService" address="/inquiryRest">
<jaxrs:serviceBeans>
<ref bean="inquiryRest" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jaxbProvider"/>
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
<bean id="inquiryRest"
class="org.apache.juddi.api.impl.rest.UDDIInquiryJAXRS" />
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="ignoreNamespaces" value="true"/>
<property name="namespaceMap" ref="jsonNamespaceMap"/>
</bean>
<bean id="jaxbProvider"
class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
On Sun, Dec 8, 2013 at 4:10 AM, Jose María Zaragoza
<[email protected]> wrote:
Maybe you need to configure providers and declare them with <jaxrs:providers> .
Something like :
<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable" >
<entry key="urn:uddi-org:api_v3" value="uddiv3"/>
</util:map>
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="ignoreNamespaces" value="true"/>
<property name="namespaceMap" ref="jsonNamespaceMap"/>
</bean>
<bean id="jaxbProvider"
class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
<jaxrs:server id="inquiryRestService" address="/inquiryRest">
<jaxrs:serviceBeans>
<ref bean="inquiryRest" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jaxbProvider"/>
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
2013/12/8 Alex O'Ree <[email protected]>:
Thanks for the reply. I've added the map, however i still get the same error
WARNING: javax.ws.rs.InternalServerErrorException:
java.lang.IllegalStateException: Invalid JSON namespace: urn:uddi-org
:api_v3
at
org.apache.cxf.jaxrs.provider.json.JSONProvider.writeTo(JSONProvider.java:377)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1326)
at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:282)
at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:154)
at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:85)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)
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.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:394)
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:744)
Caused by: java.lang.IllegalStateException: Invalid JSON namespace:
urn:uddi-org:api_v3
at
org.codehaus.jettison.mapped.MappedNamespaceConvention.getJSONNamespace(MappedNamespaceConvention.java:252)
at
org.codehaus.jettison.mapped.MappedNamespaceConvention.createKey(MappedNamespaceConvention.java:260)
at
org.codehaus.jettison.mapped.MappedXMLStreamWriter.writeStartElement(MappedXMLStreamWriter.java:220)
at
com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput.beginStartTag(XMLStreamWriterOutput.java:118)
at
com.sun.xml.bind.v2.runtime.output.XmlOutputAbstractImpl.beginStartTag(XmlOutputAbstractImpl.java:102)
at
com.sun.xml.bind.v2.runtime.output.NamespaceContextImpl$Element.startElement(NamespaceContextImpl.java:496)
at
com.sun.xml.bind.v2.runtime.XMLSerializer.endNamespaceDecls(XMLSerializer.java:288)
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:590)
at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:342)
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323)
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:178)
at
org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:479)
at
org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:542)
at
org.apache.cxf.jaxrs.provider.json.JSONProvider.writeTo(JSONProvider.java:369)
... 31 more
and the relevant parts of beans.xml
<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable" >
<entry key="urn:uddi-org:api_v3" value="uddiv3"/>
</util:map>
<jaxrs:server id="inquiryRestService" address="/inquiryRest">
<jaxrs:serviceBeans>
<ref bean="inquiryRest" />
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="inquiryRest"
class="org.apache.juddi.api.impl.rest.UDDIInquiryJAXRS" />
<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="ignoreNamespaces" value="true"/>
<property name="namespaceMap" ref="jsonNamespaceMap"/>
</bean>
using this pom dependencies
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.3</version>
</dependency>
I'll try 1.3.4
On Sat, Dec 7, 2013 at 7:19 AM, Jose María Zaragoza
<[email protected]> wrote:
I had the same problem than you and ignoreNamespaces=true didn't work
for me ( I'm using Apache CXF 2.7.3 and Jettison 1.3.4 )
I don't know why.
If you try it and it works for you, please notify to me.
To solved that, I had to map my namespace to empty string ( "") **
only for JSON messages**, not for XML messages:
<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
<entry key="http://domain.com/ws/type" value=""/>
</util:map>
<bean id="jsonProvider"
class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="namespaceMap" ref="jsonNamespaceMap"/>
</bean>
Regards
2013/12/7 Alex O'Ree <[email protected]>:
Hi I have a JAXB annotated (wsimport) jaxws service that i'm writing
an adapter for using jaxrs and jettison with 2.7.5.
When service the rest endpoint with XML using the jaxws objects, it
works just fine. However when serving JSON encoding data in response,
I get this.
Caused by: java.lang.IllegalStateException: Invalid JSON namespace:
urn:uddi-org:api_v3
at
org.codehaus.jettison.mapped.MappedNamespaceConvention.getJSONNamespace(MappedNamespaceConvention.java:252)
at
org.codehaus.jettison.mapped.MappedNamespaceConvention.createKey(MappedNamespaceConvention.java:260)
at
org.codehaus.jettison.mapped.MappedXMLStreamWriter.writeStartElement(MappedXMLStreamWriter.java:220)
at
com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput.beginStartTag(XMLStreamWriterOutput.java:118)
Beans.xml config file
<jaxrs:server id="inquiryRestService" address="/inquiryRest">
<jaxrs:serviceBeans>
<ref bean="inquiryRest" />
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="inquiryRest"
class="org.apache.juddi.api.impl.rest.UDDIInquiryJAXRS" >
</bean>
<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="ignoreNamespaces" value="true"/>
</bean>
this part works
@GET
@Path("/XML/businessDetail/{id}")
@Produces("application/xml")
@org.apache.cxf.jaxrs.model.wadl.Description("Returns the details
of a business entity in XML")
public org.uddi.api_v3.BusinessEntity
getBusinessDetailXML(@PathParam("id") String id) throws
WebApplicationException {
return getBusinessDetail(id);
}
this part does not
@GET
@Path("/JSON/businessDetail/{id}")
@Produces("application/json")
@org.apache.cxf.jaxrs.model.wadl.Description("Returns the details
of a business entity in JSON")
public org.uddi.api_v3.BusinessEntity
getBusinessDetailJSON(@PathParam("id") String id) throws
WebApplicationException {
return getBusinessDetail(id);
}
The complete code is over here:
http://svn.apache.org/repos/asf/juddi/trunk/juddi-rest-cxf/
From googling, I've seen that adding the ignoreNamespaces=true should
fix this, but I'm not sure if I have it in the write place. The docs
don't have a clear example of this
--
Sergey Beryozkin
Talend Community Coders
http://coders.talend.com/
Blog: http://sberyozkin.blogspot.com