Think I SOLVED this.  Appears the issue is with the following line in
cxf-beans.xml file...

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.*
JacksonJsonProvider*"/>

SHOULD be:

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.*
JacksonJaxbJsonProvider*"/>

Simply changing that class reference, appears to have solved the issue.  *Now
*the JSON element order matches the XML element order in the response
output.

Hopefully this is indeed the correction.


On Sat, Mar 24, 2012 at 1:47 PM, Mark Streit <[email protected]> wrote:

> I hope I have what MIGHT be a simple question.  (one article I found on
> Google indicated that this *should *work, however I also found a number
> of threads relating to this where it was commented that JSON objects have
> fields which are inherently UNORDERED).  We have a case where the consumer
> is expecting the JSON to adhere to a JSON schema that has been pre-defined.
>
> Have a simple Book class annotated as shown:
>
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlRootElement(name="Book")
> @XmlType(name = "Book", namespace="http://dvo.services.book.acme.com/";, 
> *propOrder
> *= { "bookID", "bookTitle", "authorName", "ISBN", "bookTypeCode",
> "bookPublisher", "bookRetail", "bookCost", "pageCount" })
> public class Book {
>
> Using a JAX-RS annotated service class (for a REST endpoint) works
> perfectly returning XML when the Accept header is application/xml... the
> XML returned *honors *the propOrder attribute *as specified*.
>
> However, if I pass the Accept header as application/json - I DO get a
> complete JSON response, as expected... except the propOrder appears to be
> *ignored *- the elements come back in a different order.
>
> I have the JSON provider for Jackson set as follows in the beans
> configuration file (called cxf-beans.xml in my case)
>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>     xmlns:jaxws="http://cxf.apache.org/jaxws";
>     xmlns:jaxrs="http://cxf.apache.org/jaxrs";
>     xsi:schemaLocation="
>     http://www.springframework.org/schema/beans
>     http://www.springframework.org/schema/beans/spring-beans-2.5.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";>
>
>     <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" />
>
>     <bean id="jsonProvider"
> class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
>
>     <!-- JAX-RS -->
>     <jaxrs:server id="bookService" address="/RS">
>         <jaxrs:serviceBeans>
>             <ref bean="bookServiceRS" />
>         </jaxrs:serviceBeans>
>         <jaxrs:providers>
>             <ref bean="jsonProvider"/>
>         </jaxrs:providers>
>     </jaxrs:server>
> ...
> ...
>
> I will keep looking but thought I'd post this in case someone has seen
> this behavior before.  I am guessing I have missed something in telling
> Jackson how to serialize, perhaps...
>
> I do not have any sort of custom JSON serializer configured - just relying
> on whatever OOTB behavior JAXB/Jackson provide when used with CXF - (using
> version 2.5.2).
>
> Thanks
>
> *
> *
>


*
*

Reply via email to