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

Reply via email to