Hi Christian:
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.
But that is a different issue, right ? attributesToElements affects the
serialization only and it appears it does the trick in your case, but of
course, the problem on the incoming side, Jettison does not know
accessProfile is supposed to be reported to JAXB reader as an attribute.
Is it CXF only which consumes such JSON sequences ? If yes then may be
there's no reason for dropping '@' ? I guess it does make sense when a
browser script/etc is targeted
thanks, Sergey
Any other clue?
Regards,
Christian
Am Dienstag, 12. Juli 2011 um 18:43 schrieb Sergey Beryozkin:
- Hide quoted text -
Hi,
On Tue, Jul 12, 2011 at 5:08 PM, Christian Hartmann
<[email protected]> 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