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 > > * > * > * *
