Hi, I updated the documentation to get JacksonJaxbJsonProvider
referenced as well
Thanks, Sergey
On 24/03/12 21:05, Mark Streit wrote:
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
*
*
*
*