Hi Response contains 'Customers' because you have an explicit collection of Customer beans returned and Customer bean's xml name is 'Customer' - by default JSONProvider will try to pluralize it in order to have a 'better' collection name.
When you get an explicit (top-level) JSON collection submitted, it has to be 'Customer' - because all we hae on the input is Customer.class instance to be populated, thus having 'Customers' won't work. What you can do is: - customize the name of the collection wrapper to 'Customer': http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-Handlingexplicitcollections or set inTransformElements property on JSONProvider: http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-CustomizingJAXBXMLandJSONinputandoutput which will convert 'Customers' into 'Customer' on input: "Customers" : "Customer" Hope that helps, Sergey On Tue, May 3, 2011 at 10:33 AM, arnavawasthi <[email protected]> wrote: > There was one more issue. > > List of Customers: Notice the "Customers" root key. > http://localhost:8080/cxfjaxrs/jaxrs/customerservice/listCustomers > Response: > {"Customers":[{"id":2999,"name":"Som Awasthi"},{"id":3000,"name":"Arnav > Awasthi"}]} > > When I submitted the same in addCustomersList > > http://localhost:8080/cxfjaxrs/jaxrs/customerservice/addCustomersList > Response: > {"Customers":[JAXBException occurred : unable to marshal type > "com.sun.org.apache.xerces.internal.dom.ElementNSImpl" as an element because > it is missing an @XmlRootElement annotation. unable to marshal type > "com.sun.org.apache.xerces.internal.dom.ElementNSImpl" as an element because > it is missing an @XmlRootElement annotation. > > And when I changed the key from "Customers" to "Customer", it worked. This > is somewhat confusing. Ideally same json format should work both ways. > > Thanks, > Arnav > > On Sun, May 1, 2011 at 10:45 PM, Sergey Beryozkin-5[via CXF] < > [email protected]> wrote: > >> Please try 2.3.4 >> >> thanks, Sergey >> >> On Sun, May 1, 2011 at 3:50 PM, arnavawasthi <[hidden >> email]<http://user/SendEmail.jtp?type=node&node=4363121&i=0&by-user=t>> >> wrote: >> >> > Souce code: >> > https://bitbucket.org/arnavawasthi/apache-cxf-jaxrs-spring/overview >> > >> > Test case: >> > I want to add multiple customers in one request. So instead of making >> > multiple calls, I want to make one with array of Customer objects. I >> > expected that this array would be easily converted into List<Customer> >> but >> > it didn't work as expected. >> > >> > URL: >> http://localhost:8080/jaxrs/jaxrs/customerservice/addCustomersArray/ >> > Accept: application/json >> > Content-Type: application/json >> > Input JSON: >> > {"Customers":{"Customer":[{"id":2999,"name":"Som >> > Awasthi"},{"id":3000,"name":"Arnav Awasthi"}]}} >> > >> > Output: ERROR >> > >> > Accept: application/json >> > Content-Type: application/xml >> > Input XML: >> > <Customers><Customer><id>2999</id><name>Som >> > Awasthi</name></Customer><Customer><id>3000</id><name>Arnav >> > Awasthi</name></Customer></Customers> >> > >> > Output json: >> > {"Customers":{"Customer":[{"id":2999,"name":"Som >> > Awasthi"},{"id":3000,"name":"Arnav Awasthi"}]}} >> > >> > Now since you have the source code, you can try other options as well. >> Let >> > me know if you get it working. >> > >> > Thanks, >> > Arnav >> > >> > On Sun, May 1, 2011 at 7:13 PM, arnav awasthi <[hidden >> > email]<http://user/SendEmail.jtp?type=node&node=4363121&i=1&by-user=t>>wrote: >> >> > >> >> If you want, I can share the code and use cases I am trying. >> >> >> >> On Sun, May 1, 2011 at 7:12 PM, Benson Margulies[via CXF] < >> >> [hidden >> >> email]<http://user/SendEmail.jtp?type=node&node=4363121&i=2&by-user=t>> >> wrote: >> >> >> >>> Now we have to wait for Sergey or someone. I'm puzzled by this >> >>> producing that particular error status. >> >>> >> >>> On Sun, May 1, 2011 at 9:39 AM, arnavawasthi <[hidden email]< >> http://user/SendEmail.jtp?type=node&node=4362780&i=0&by-user=t>> >> >> >>> wrote: >> >>> >> >>> > @Consumes("application/json") was already there. Just to experiment I >> >> >>> added >> >>> > @Consumes({"application/xml", "application/json"}) and tried with >> >>> equivalent >> >>> > xml instead. With xml it worked. >> >>> > Input XML: >> >>> > <Customers><Customer><id>2999</id><name>Som >> >>> > Awasthi</name></Customer><Customer><id>3000</id><name>Arnav >> >>> > Awasthi</name></Customer></Customers> >> >>> > >> >>> > Output JSON: >> >>> > {"Customer":[{"id":2999,"name":"Som >> Awasthi"},{"id":3000,"name":"Arnav >> >>> > Awasthi"}]} >> >>> > >> >>> > But if I try the opposite, it doesn't work. May be this error is due >> to >> >>> the >> >>> > JAXB library, which does not support this feature.-- >> >>> > View this message in context: >> >>> >> http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362777.html<http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362777.html?by-user=t><http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362777.html%3Chttp://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362777.html?by-user=t%3E&by-user=t> >> >> >>> >> >>> > Sent from the cxf-user mailing list archive at Nabble.com. >> >>> > >> >>> >> >>> >> >>> ------------------------------ >> >>> If you reply to this email, your message will be added to the >> discussion >> >>> below: >> >>> >> >>> >> http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362780.html<http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362780.html?by-user=t> >> >>> To unsubscribe from How to submit JSON data as request body in Apache >> CXF >> >>> jax-rs (REST), click here< >> >>> >> >>> >> >> >> >> >> > -- >> > View this message in context: >> http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362858.html<http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4362858.html?by-user=t> >> > Sent from the cxf-user mailing list archive at Nabble.com. >> >> >> >> -- >> Sergey Beryozkin >> >> Application Integration Division of Talend >> http://sberyozkin.blogspot.com >> >> >> ------------------------------ >> If you reply to this email, your message will be added to the discussion >> below: >> >> http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4363121.html >> To unsubscribe from How to submit JSON data as request body in Apache CXF >> jax-rs (REST), click >> here<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4361669&code=YXJuYXZhd2FzdGhpQGdtYWlsLmNvbXw0MzYxNjY5fC04MTcxNzc0NTY=>. >> >> > > > -- > View this message in context: > http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-tp4361669p4366811.html > Sent from the cxf-user mailing list archive at Nabble.com. -- Sergey Beryozkin Application Integration Division of Talend http://sberyozkin.blogspot.com
