Hi David
sorry for a late reply, I was planning to reply later this evening.
Setting a 'features' key should've made a difference but I will try your
example just a bit later
I'll get back to you asap
Apparently a Jackson provider shoud do easily enough.
cheers, Sergey
----- Original Message -----
From: "KARR, DAVID (ATTCINW)" <[email protected]>
To: <[email protected]>
Sent: Thursday, October 01, 2009 5:35 PM
Subject: RE: How to make clean json, instead of xml-ish json?
-----Original Message-----
From: KARR, DAVID (ATTCINW)
Sent: Thursday, October 01, 2009 9:28 AM
To: [email protected]
Subject: RE: How to make clean json, instead of xml-ish json?
> -----Original Message-----
> From: KARR, DAVID (ATTCINW)
>
> I have a REST prototype using CXF that produces reasonable looking
XML,
> and almost reasonably looking JSON. The JSON it produces is
"xml-ish".
>
> For instance, the sample XML I get is the following:
>
> <Item>
> <description>def</description>
> <features>
> <feature>123</feature>
> <feature>456</feature>
> </features>
> <id>1</id>
> <title>abc</title>
> </Item>
>
> The JSON is this:
>
>
{"Item":{"description":"def","features":{"feature":[123,456]},"id":1,"t
> i
> tle":"abc"}}
>
> A nicer JSON result would have been this:
>
>
{"Item":{"description":"def","features":[123,456],"id":1,"title":"abc"}
> }
>
> Is it possible to modify just the JSON results, but still have the
"out
> of the box" XML results?
Related to this, I noticed the "Dealing with JSON array serialization
issues" section in the user guide. I have a feeling this is telling
me
that setting "serializeAsArray" and "arrayKeys" in my JSONProvider.
I'm
building a test for this now. Even if this works, I'd have to say
that
this documentation could use a clearer explanation of this, perhaps
with
more fully-elaborated examples. The documentation for this is quite
brief. Full examples showing "before" and "after" would be useful.
There is a link to another example that supposedly provides more info,
but it only shows the beans.xml file, without any elaboration or
example.
My change to "serializeAsArray" and "arrayKeys" in a JSONProvider didn't
do anything. The JSON output didn't change.
The following are the relevant pieces of my beans.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemascore.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"
/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<import
resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
<jaxrs:server name="restcatalogserver" address="/rest">
<jaxrs:features>
<cxf:logging/>
</jaxrs:features>
<jaxrs:providers>
<ref bean="jsonProvider"/>
</jaxrs:providers>
<jaxrs:serviceBeans>
<ref bean="catalog"/>
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="jsonProvider"
class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="serializeAsArray" value="true"/>
<property name="arrayKeys">
<list>
<value>features</value>
</list>
</property>
</bean>
<bean id="catalog" class="com.att.ecom.catalog.Catalog">
</bean>
</beans>