That said I fixed it to make sure JSON sequences created from the explicit collections of beans without a preconfigured wrapper name can be read as is. It might've been a regression after all - I added a test now...
Cheers, Sergey On Tue, May 3, 2011 at 10:50 AM, Sergey Beryozkin <[email protected]> wrote: > 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 > -- Sergey Beryozkin Application Integration Division of Talend http://sberyozkin.blogspot.com
