You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Christian Hartmann <ch...@christian-hartmann.de> on 2011/07/12 18:08:38 UTC
CXF/JSON: Way to configure CXF and/or the JSONProvider not to have to use the "@" as a marker for the attribute?
Hi there,
I am using Apache CXF 2.4.1 and I want to POST a JSON-String to my RestFul-Service.
So I configure the following within my Spring 3.x configuration:
<util:map id="nstojns" map-class="java.util.HashMap">
<entry key="http://xyz.com/serviceapi" value="serviceapi"/>
</util:map>
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="namespaceMap" ref="nstojns"/>
<property name="ignoreNamespaces" value="true"/>
<property name="inTransformElements">
<map>
<entry key="FeedbackData" value="{http://xyz.com/serviceapi}FeedbackData"/>
<entry key="FeedbackEvent" value="{http://xyz.com/serviceapi}FeedbackEvent"/>
</map>
</property>
</bean>
<jaxrs:server id="cxfService" address="${cxf.endpoint.shopservice.address}">
<jaxrs:serviceFactories>
<ref bean="feedbackFacadeFactory"/>
</jaxrs:serviceFactories>
<jaxrs:providers>
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
Now I can call my service and do a POST sending a JSON-Object like this:
{"FeedbackData":{"FeedbackEvent":{"@accessProfile":"Test"}}}
and the binding is done by JAXB based on a provided XSD without any problems.
However I have to mention the ugly "@" for my attributes. Is there any way to configure CXF and/or the JSONProvider not to have to use the "@" as a marker for the attribute? If yes, how?
Any help will be appreciated.
Regards,
Christian
Re: CXF/JSON: Way to configure CXF and/or the JSONProvider not to
have to use the "@" as a marker for the attribute?
Posted by ┃Christian Hartmann <ch...@christian-hartmann.de>.
Dear Sergey,
thank you for your fast response and your suggestion.
I am sorry, but it did not work. I've tried it before.
I have configured my JSONProvider now in that way
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="namespaceMap" ref="nstojns"/>
<property name="ignoreNamespaces" value="true"/>
<property name="attributesToElements" value="true"/>
<property name="inTransformElements">
<map>
<entry key="FeedbackData" value="{
http://xyz.com/serviceapi}FeedbackData"/>
<entry key="FeedbackEvent" value="{
http://xyz.com/serviceapi}FeedbackEvent"/>
</map>
</property>
</bean>
and send the following JSON-Object
{"FeedbackData":{"FeedbackEvent":{"accessProfile":"Test"}}}
However, after the unmarshalling the property accessProfile is null. If I
provided the accessProfile as @accessProfile within the JSON-Object
everything is fine. It seems the property attributesToElements has no
effect.
Any other clue?
Regards,
Christian
Am Dienstag, 12. Juli 2011 um 18:43 schrieb Sergey Beryozkin:
Hi,
On Tue, Jul 12, 2011 at 5:08 PM, Christian Hartmann
<ch...@christian-hartmann.de> wrote:
Hi there,
I am using Apache CXF 2.4.1 and I want to POST a JSON-String to my
RestFul-Service.
So I configure the following within my Spring 3.x configuration:
<util:map id="nstojns" map-class="java.util.HashMap">
<entry key="http://xyz.com/serviceapi" value="serviceapi"/>
</util:map>
<bean id="jsonProvider"
class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="namespaceMap" ref="nstojns"/>
<property name="ignoreNamespaces" value="true"/>
<property name="inTransformElements">
<map>
<entry key="FeedbackData" value="{
http://xyz.com/serviceapi}FeedbackData"/>
<entry key="FeedbackEvent" value="{
http://xyz.com/serviceapi}FeedbackEvent"/>
</map>
</property>
</bean>
<jaxrs:server id="cxfService"
address="${cxf.endpoint.shopservice.address}">
<jaxrs:serviceFactories>
<ref bean="feedbackFacadeFactory"/>
</jaxrs:serviceFactories>
<jaxrs:providers>
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
Now I can call my service and do a POST sending a JSON-Object like this:
{"FeedbackData":{"FeedbackEvent":{"@accessProfile":"Test"}}}
and the binding is done by JAXB based on a provided XSD without any
problems.
However I have to mention the ugly "@" for my attributes. Is there any way
to configure CXF and/or the JSONProvider not to have to use the "@" as a
marker for the attribute? If yes, how?
Try adding
<property name="attributesToElements" value="true"/>
that should do it
Cheers, Sergey
Any help will be appreciated.
Regards,
Christian
--
Sergey Beryozkin
http://sberyozkin.blogspot.com
Talend - http://www.talend.com
Re: CXF/JSON: Way to configure CXF and/or the JSONProvider not to
have to use the "@" as a marker for the attribute?
Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi,
On Tue, Jul 12, 2011 at 5:08 PM, Christian Hartmann
<ch...@christian-hartmann.de> wrote:
> Hi there,
>
> I am using Apache CXF 2.4.1 and I want to POST a JSON-String to my RestFul-Service.
>
> So I configure the following within my Spring 3.x configuration:
>
> <util:map id="nstojns" map-class="java.util.HashMap">
> <entry key="http://xyz.com/serviceapi" value="serviceapi"/>
> </util:map>
>
> <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
> <property name="namespaceMap" ref="nstojns"/>
> <property name="ignoreNamespaces" value="true"/>
> <property name="inTransformElements">
> <map>
> <entry key="FeedbackData" value="{http://xyz.com/serviceapi}FeedbackData"/>
> <entry key="FeedbackEvent" value="{http://xyz.com/serviceapi}FeedbackEvent"/>
> </map>
> </property>
> </bean>
>
> <jaxrs:server id="cxfService" address="${cxf.endpoint.shopservice.address}">
> <jaxrs:serviceFactories>
> <ref bean="feedbackFacadeFactory"/>
> </jaxrs:serviceFactories>
> <jaxrs:providers>
> <ref bean="jsonProvider"/>
> </jaxrs:providers>
> </jaxrs:server>
>
> Now I can call my service and do a POST sending a JSON-Object like this:
>
> {"FeedbackData":{"FeedbackEvent":{"@accessProfile":"Test"}}}
>
> and the binding is done by JAXB based on a provided XSD without any problems.
>
> However I have to mention the ugly "@" for my attributes. Is there any way to configure CXF and/or the JSONProvider not to have to use the "@" as a marker for the attribute? If yes, how?
>
Try adding
<property name="attributesToElements" value="true"/>
that should do it
Cheers, Sergey
> Any help will be appreciated.
>
> Regards,
>
> Christian
>
>
>
--
Sergey Beryozkin
http://sberyozkin.blogspot.com
Talend - http://www.talend.com