You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Jose María Zaragoza <de...@gmail.com> on 2015/06/22 12:42:38 UTC

POST an JSON array by using Jettison1.3.5

Hello:

I would like to POST a JSON array to a  REST service

Something like

[

{
    "name"  : "xxxxx",
    "value"  : "111111"
},
{
    "name"  : "yyyyyy",
    "value"  : "222222"
}

]

I'm using CXF 2.7.8 + Jettison 1.3.5

I usually implement it by JAXB classes , but I don't get achieving it
If I try with a JSONArray

this.client.path("/test/").post(myJSONArray)

I get

No message body writer has been found for class : class
org.codehaus.jettison.json.JSONArray



Any idea ?

Thanks and regards

Re: POST an JSON array by using Jettison1.3.5

Posted by Sergey Beryozkin <sb...@gmail.com>.
And the next 2 tests too...

Some of it should help...
Sergey
On 22/06/15 15:36, Sergey Beryozkin wrote:
> Hi
>
> Have a look at
> https://github.com/apache/cxf/blob/master/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java#L215
>
>
> Cheers, Sergey
> On 22/06/15 15:30, Jose María Zaragoza wrote:
>> 2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>> When you use a collection, JSONProvider wraps it internally to support a
>>> common path where a JAXB bean is provided and serialized, so
>>> 'dropRootElement' drops that internally added root.
>>> Create a basic CardTypes bean wrapping a collection, use
>>> webClient.post(),
>>> and these properties:
>>>
>>> <property name="dropRootElement" value="true" />
>>> <!-- Ensures that the exclusion occurs directly in Jettison and not
>>> in the
>>> internal XMLStreamWriter -->
>>> <property name="dropElementsInXmlStream" value="false" />
>>> <property name="serializeAsArray" value="true"/>
>>>
>>> Let me know if it works
>>> Sergey
>>>
>>
>> Thanks, but I'm afraid it doesn't work for me
>>
>>
>> My code
>>
>> // List<String> card2
>> //CardType has @XmlRootElement annotation
>> List<CardType> list = new ArrayList<CardType>();
>>
>> for (String c2:card2)
>> {
>>       CardType cardType = this.factory.createCardType();
>>       cardType.setIcc(c2);
>>
>>       list.add(cardType);
>> }
>>
>> javax.ws.rs.core.Response r =
>> this.client.path("/temp").postCollection(list,CardType.class);
>> //
>>
>>
>> Without   <property name="dropElementsInXmlStream" value="false" />
>>
>>
>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>
>>
>> With  <property name="dropElementsInXmlStream" value="false" />
>>
>>   {"cardType":[8934077600006637935,"22222222222222222222"]}
>>
>>
>> Note thart "icc" fieldname is missing
>>
>>
>>
>> I'll try to upgrade to jettison 1.3.7 and cxf 2.7.10 ( if you think
>> that could be the reason of my problem )
>>
>>
>> If you have any JAXB class that I could test , I would appreciate
>>
>> Regards
>>
>>
>>
>>>
>>>
>>> On 22/06/15 12:28, Jose María Zaragoza wrote:
>>>>
>>>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>>
>>>>> Hi
>>>>>
>>>>> CXF JettisonProvider is only capable of supporting JAXB-generated
>>>>> events,
>>>>> it
>>>>> does not deal directly with JSONObjects.
>>>>> What is the problem you are seeing with JAXB ? Can not have a sequence
>>>>> starting immediately from "[" ? That should be possible to
>>>>> configure with
>>>>> JettisonProvider with properties like 'dropRootElement': true,
>>>>> dropElementsInXmlStream: false, serializeAsArray: true
>>>>
>>>>
>>>> Right: I can not have a sequence starting immediately from "["
>>>>
>>>> My settings :
>>>>
>>>>    <property name="dropRootElement" value="true" />
>>>>    <property name="supportUnwrapped" value="true" />
>>>>    <property name="serializeAsArray" value="true"/>
>>>>    <property name="ignoreEmptyArrayValues" value="true"/>
>>>>
>>>>
>>>> My JAXB class
>>>>
>>>> @XmlRootElement
>>>> @XmlAccessorType(XmlAccessType.FIELD)
>>>> @XmlType(name = "CardType", propOrder = { "line", "icc",
>>>> "statusCode" })
>>>> public class CardType
>>>> {
>>>>
>>>> @XmlElement(required = true)
>>>> protected String line;
>>>> @XmlElement(required = true)
>>>> protected String icc;
>>>> @XmlElement(name = "status_code")
>>>> protected String statusCode;
>>>>
>>>>
>>>> The call:
>>>> List<CardType> l = new ArrayList<CardType>();
>>>> ...
>>>> ....
>>>> this.client.path("/temp").postCollection(l, CardType.class);
>>>>
>>>>
>>>> and I send
>>>>
>>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>>
>>>>
>>>> I would like to send
>>>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>>>
>>>>
>>>> Extra: I don't know why it sendsthe first value without quotes ...
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> Cheers, Sergey
>>>>>
>>>>>
>>>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>>>
>>>>>>
>>>>>> Hello:
>>>>>>
>>>>>> I would like to POST a JSON array to a  REST service
>>>>>>
>>>>>> Something like
>>>>>>
>>>>>> [
>>>>>>
>>>>>> {
>>>>>>        "name"  : "xxxxx",
>>>>>>        "value"  : "111111"
>>>>>> },
>>>>>> {
>>>>>>        "name"  : "yyyyyy",
>>>>>>        "value"  : "222222"
>>>>>> }
>>>>>>
>>>>>> ]
>>>>>>
>>>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>>>
>>>>>> I usually implement it by JAXB classes , but I don't get achieving it
>>>>>> If I try with a JSONArray
>>>>>>
>>>>>> this.client.path("/test/").post(myJSONArray)
>>>>>>
>>>>>> I get
>>>>>>
>>>>>> No message body writer has been found for class : class
>>>>>> org.codehaus.jettison.json.JSONArray
>>>>>>
>>>>>>
>>>>>>
>>>>>> Any idea ?
>>>>>>
>>>>>> Thanks and regards
>>>>>>
>>>>>
>>>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: POST an JSON array by using Jettison1.3.5

Posted by Jose María Zaragoza <de...@gmail.com>.
2015-06-22 22:42 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
> I've updated that test locally:
>
> provider.setDropRootElement(true);
> provider.setArrayKeys(Arrays.asList("parameterList"));
> provider.setOutDropElements(Arrays.asList("parameterList"));
> provider.setDropElementsInXmlStream(false);
>
> and it produces
>
> [{"name":"param"}]
> or
> [{"name":"param"},{"name":"param"}]
>
> Not ideal that certain properties have to be named but JAXB sends only
> XMLStreamWriter events to Jettison.
>
> Plenty of other options are available.
> Andriy Redko did a work on JsrJsonpProvider which supports JSONP JSR,
> I recently added JsonObjectMapProvider which supports simple
> JsonObjectMapReaderWriter, those options are in CXF starting from 3.0.x and
> Jackson should do well too
>
> HTH, Sergey

Thank for your help.

I'll do tests on my own


Regards

>
>
> On 22/06/15 17:13, Jose María Zaragoza wrote:
>>
>> 2015-06-22 16:36 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>
>>> Hi
>>>
>>> Have a look at
>>>
>>> https://github.com/apache/cxf/blob/master/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java#L215
>>>
>>> Cheers, Sergey
>>
>>
>>
>> Thanks
>>
>> I've seen that this test checks if JSON provider can generate
>> [{"parameterList":{"name":"param"}}]
>> And works fine with
>>
>> provider.setSerializeAsArray(true);
>> provider.setDropElementsInXmlStream(false);
>>
>>
>> But I need [{"name":"param"}]
>>
>> And I don't know how achieve that
>>
>>
>>
>>>
>>> On 22/06/15 15:30, Jose María Zaragoza wrote
>>>>
>>>>
>>>> 2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>>
>>>>>
>>>>> When you use a collection, JSONProvider wraps it internally to support
>>>>> a
>>>>> common path where a JAXB bean is provided and serialized, so
>>>>> 'dropRootElement' drops that internally added root.
>>>>> Create a basic CardTypes bean wrapping a collection, use
>>>>> webClient.post(),
>>>>> and these properties:
>>>>>
>>>>> <property name="dropRootElement" value="true" />
>>>>> <!-- Ensures that the exclusion occurs directly in Jettison and not in
>>>>> the
>>>>> internal XMLStreamWriter -->
>>>>> <property name="dropElementsInXmlStream" value="false" />
>>>>> <property name="serializeAsArray" value="true"/>
>>>>>
>>>>> Let me know if it works
>>>>> Sergey
>>>>>
>>>>
>>>> Thanks, but I'm afraid it doesn't work for me
>>>>
>>>>
>>>> My code
>>>>
>>>> // List<String> card2
>>>> //CardType has @XmlRootElement annotation
>>>> List<CardType> list = new ArrayList<CardType>();
>>>>
>>>> for (String c2:card2)
>>>> {
>>>>        CardType cardType = this.factory.createCardType();
>>>>        cardType.setIcc(c2);
>>>>
>>>>        list.add(cardType);
>>>> }
>>>>
>>>> javax.ws.rs.core.Response r =
>>>> this.client.path("/temp").postCollection(list,CardType.class);
>>>> //
>>>>
>>>>
>>>> Without   <property name="dropElementsInXmlStream" value="false" />
>>>>
>>>>
>>>>
>>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>>
>>>>
>>>> With  <property name="dropElementsInXmlStream" value="false" />
>>>>
>>>>    {"cardType":[8934077600006637935,"22222222222222222222"]}
>>>>
>>>>
>>>> Note thart "icc" fieldname is missing
>>>>
>>>>
>>>>
>>>> I'll try to upgrade to jettison 1.3.7 and cxf 2.7.10 ( if you think
>>>> that could be the reason of my problem )
>>>>
>>>>
>>>> If you have any JAXB class that I could test , I would appreciate
>>>>
>>>> Regards
>>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>> On 22/06/15 12:28, Jose María Zaragoza wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> CXF JettisonProvider is only capable of supporting JAXB-generated
>>>>>>> events,
>>>>>>> it
>>>>>>> does not deal directly with JSONObjects.
>>>>>>> What is the problem you are seeing with JAXB ? Can not have a
>>>>>>> sequence
>>>>>>> starting immediately from "[" ? That should be possible to configure
>>>>>>> with
>>>>>>> JettisonProvider with properties like 'dropRootElement': true,
>>>>>>> dropElementsInXmlStream: false, serializeAsArray: true
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Right: I can not have a sequence starting immediately from "["
>>>>>>
>>>>>> My settings :
>>>>>>
>>>>>>     <property name="dropRootElement" value="true" />
>>>>>>     <property name="supportUnwrapped" value="true" />
>>>>>>     <property name="serializeAsArray" value="true"/>
>>>>>>     <property name="ignoreEmptyArrayValues" value="true"/>
>>>>>>
>>>>>>
>>>>>> My JAXB class
>>>>>>
>>>>>> @XmlRootElement
>>>>>> @XmlAccessorType(XmlAccessType.FIELD)
>>>>>> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode"
>>>>>> })
>>>>>> public class CardType
>>>>>> {
>>>>>>
>>>>>> @XmlElement(required = true)
>>>>>> protected String line;
>>>>>> @XmlElement(required = true)
>>>>>> protected String icc;
>>>>>> @XmlElement(name = "status_code")
>>>>>> protected String statusCode;
>>>>>>
>>>>>>
>>>>>> The call:
>>>>>> List<CardType> l = new ArrayList<CardType>();
>>>>>> ...
>>>>>> ....
>>>>>> this.client.path("/temp").postCollection(l, CardType.class);
>>>>>>
>>>>>>
>>>>>> and I send
>>>>>>
>>>>>>
>>>>>>
>>>>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>>>>
>>>>>> I would like to send
>>>>>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>>>>>
>>>>>>
>>>>>> Extra: I don't know why it sendsthe first value without quotes ...
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Cheers, Sergey
>>>>>>>
>>>>>>>
>>>>>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hello:
>>>>>>>>
>>>>>>>> I would like to POST a JSON array to a  REST service
>>>>>>>>
>>>>>>>> Something like
>>>>>>>>
>>>>>>>> [
>>>>>>>>
>>>>>>>> {
>>>>>>>>         "name"  : "xxxxx",
>>>>>>>>         "value"  : "111111"
>>>>>>>> },
>>>>>>>> {
>>>>>>>>         "name"  : "yyyyyy",
>>>>>>>>         "value"  : "222222"
>>>>>>>> }
>>>>>>>>
>>>>>>>> ]
>>>>>>>>
>>>>>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>>>>>
>>>>>>>> I usually implement it by JAXB classes , but I don't get achieving
>>>>>>>> it
>>>>>>>> If I try with a JSONArray
>>>>>>>>
>>>>>>>> this.client.path("/test/").post(myJSONArray)
>>>>>>>>
>>>>>>>> I get
>>>>>>>>
>>>>>>>> No message body writer has been found for class : class
>>>>>>>> org.codehaus.jettison.json.JSONArray
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Any idea ?
>>>>>>>>
>>>>>>>> Thanks and regards
>>>>>>>>
>>>>>>>
>>>>>
>>>
>>>
>>> --
>>> Sergey Beryozkin
>>>
>>> Talend Community Coders
>>> http://coders.talend.com/
>>>
>>> Blog: http://sberyozkin.blogspot.com
>
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com

Re: POST an JSON array by using Jettison1.3.5

Posted by Sergey Beryozkin <sb...@gmail.com>.
I've updated that test locally:

provider.setDropRootElement(true);
provider.setArrayKeys(Arrays.asList("parameterList"));
provider.setOutDropElements(Arrays.asList("parameterList"));
provider.setDropElementsInXmlStream(false);

and it produces

[{"name":"param"}]
or
[{"name":"param"},{"name":"param"}]

Not ideal that certain properties have to be named but JAXB sends only 
XMLStreamWriter events to Jettison.

Plenty of other options are available.
Andriy Redko did a work on JsrJsonpProvider which supports JSONP JSR,
I recently added JsonObjectMapProvider which supports simple 
JsonObjectMapReaderWriter, those options are in CXF starting from 3.0.x 
and Jackson should do well too

HTH, Sergey

On 22/06/15 17:13, Jose María Zaragoza wrote:
> 2015-06-22 16:36 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>> Hi
>>
>> Have a look at
>> https://github.com/apache/cxf/blob/master/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java#L215
>>
>> Cheers, Sergey
>
>
> Thanks
>
> I've seen that this test checks if JSON provider can generate
> [{"parameterList":{"name":"param"}}]
> And works fine with
>
> provider.setSerializeAsArray(true);
> provider.setDropElementsInXmlStream(false);
>
>
> But I need [{"name":"param"}]
>
> And I don't know how achieve that
>
>
>
>>
>> On 22/06/15 15:30, Jose María Zaragoza wrote
>>>
>>> 2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>
>>>> When you use a collection, JSONProvider wraps it internally to support a
>>>> common path where a JAXB bean is provided and serialized, so
>>>> 'dropRootElement' drops that internally added root.
>>>> Create a basic CardTypes bean wrapping a collection, use
>>>> webClient.post(),
>>>> and these properties:
>>>>
>>>> <property name="dropRootElement" value="true" />
>>>> <!-- Ensures that the exclusion occurs directly in Jettison and not in
>>>> the
>>>> internal XMLStreamWriter -->
>>>> <property name="dropElementsInXmlStream" value="false" />
>>>> <property name="serializeAsArray" value="true"/>
>>>>
>>>> Let me know if it works
>>>> Sergey
>>>>
>>>
>>> Thanks, but I'm afraid it doesn't work for me
>>>
>>>
>>> My code
>>>
>>> // List<String> card2
>>> //CardType has @XmlRootElement annotation
>>> List<CardType> list = new ArrayList<CardType>();
>>>
>>> for (String c2:card2)
>>> {
>>>        CardType cardType = this.factory.createCardType();
>>>        cardType.setIcc(c2);
>>>
>>>        list.add(cardType);
>>> }
>>>
>>> javax.ws.rs.core.Response r =
>>> this.client.path("/temp").postCollection(list,CardType.class);
>>> //
>>>
>>>
>>> Without   <property name="dropElementsInXmlStream" value="false" />
>>>
>>>
>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>
>>>
>>> With  <property name="dropElementsInXmlStream" value="false" />
>>>
>>>    {"cardType":[8934077600006637935,"22222222222222222222"]}
>>>
>>>
>>> Note thart "icc" fieldname is missing
>>>
>>>
>>>
>>> I'll try to upgrade to jettison 1.3.7 and cxf 2.7.10 ( if you think
>>> that could be the reason of my problem )
>>>
>>>
>>> If you have any JAXB class that I could test , I would appreciate
>>>
>>> Regards
>>>
>>>
>>>
>>>>
>>>>
>>>> On 22/06/15 12:28, Jose María Zaragoza wrote:
>>>>>
>>>>>
>>>>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>>>
>>>>>>
>>>>>> Hi
>>>>>>
>>>>>> CXF JettisonProvider is only capable of supporting JAXB-generated
>>>>>> events,
>>>>>> it
>>>>>> does not deal directly with JSONObjects.
>>>>>> What is the problem you are seeing with JAXB ? Can not have a sequence
>>>>>> starting immediately from "[" ? That should be possible to configure
>>>>>> with
>>>>>> JettisonProvider with properties like 'dropRootElement': true,
>>>>>> dropElementsInXmlStream: false, serializeAsArray: true
>>>>>
>>>>>
>>>>>
>>>>> Right: I can not have a sequence starting immediately from "["
>>>>>
>>>>> My settings :
>>>>>
>>>>>     <property name="dropRootElement" value="true" />
>>>>>     <property name="supportUnwrapped" value="true" />
>>>>>     <property name="serializeAsArray" value="true"/>
>>>>>     <property name="ignoreEmptyArrayValues" value="true"/>
>>>>>
>>>>>
>>>>> My JAXB class
>>>>>
>>>>> @XmlRootElement
>>>>> @XmlAccessorType(XmlAccessType.FIELD)
>>>>> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
>>>>> public class CardType
>>>>> {
>>>>>
>>>>> @XmlElement(required = true)
>>>>> protected String line;
>>>>> @XmlElement(required = true)
>>>>> protected String icc;
>>>>> @XmlElement(name = "status_code")
>>>>> protected String statusCode;
>>>>>
>>>>>
>>>>> The call:
>>>>> List<CardType> l = new ArrayList<CardType>();
>>>>> ...
>>>>> ....
>>>>> this.client.path("/temp").postCollection(l, CardType.class);
>>>>>
>>>>>
>>>>> and I send
>>>>>
>>>>>
>>>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>>>
>>>>> I would like to send
>>>>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>>>>
>>>>>
>>>>> Extra: I don't know why it sendsthe first value without quotes ...
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> Cheers, Sergey
>>>>>>
>>>>>>
>>>>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Hello:
>>>>>>>
>>>>>>> I would like to POST a JSON array to a  REST service
>>>>>>>
>>>>>>> Something like
>>>>>>>
>>>>>>> [
>>>>>>>
>>>>>>> {
>>>>>>>         "name"  : "xxxxx",
>>>>>>>         "value"  : "111111"
>>>>>>> },
>>>>>>> {
>>>>>>>         "name"  : "yyyyyy",
>>>>>>>         "value"  : "222222"
>>>>>>> }
>>>>>>>
>>>>>>> ]
>>>>>>>
>>>>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>>>>
>>>>>>> I usually implement it by JAXB classes , but I don't get achieving it
>>>>>>> If I try with a JSONArray
>>>>>>>
>>>>>>> this.client.path("/test/").post(myJSONArray)
>>>>>>>
>>>>>>> I get
>>>>>>>
>>>>>>> No message body writer has been found for class : class
>>>>>>> org.codehaus.jettison.json.JSONArray
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Any idea ?
>>>>>>>
>>>>>>> Thanks and regards
>>>>>>>
>>>>>>
>>>>
>>
>>
>> --
>> Sergey Beryozkin
>>
>> Talend Community Coders
>> http://coders.talend.com/
>>
>> Blog: http://sberyozkin.blogspot.com


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: POST an JSON array by using Jettison1.3.5

Posted by Jose María Zaragoza <de...@gmail.com>.
2015-06-22 16:36 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
> Hi
>
> Have a look at
> https://github.com/apache/cxf/blob/master/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java#L215
>
> Cheers, Sergey


Thanks

I've seen that this test checks if JSON provider can generate
[{"parameterList":{"name":"param"}}]
And works fine with

provider.setSerializeAsArray(true);
provider.setDropElementsInXmlStream(false);


But I need [{"name":"param"}]

And I don't know how achieve that



>
> On 22/06/15 15:30, Jose María Zaragoza wrote
>>
>> 2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>
>>> When you use a collection, JSONProvider wraps it internally to support a
>>> common path where a JAXB bean is provided and serialized, so
>>> 'dropRootElement' drops that internally added root.
>>> Create a basic CardTypes bean wrapping a collection, use
>>> webClient.post(),
>>> and these properties:
>>>
>>> <property name="dropRootElement" value="true" />
>>> <!-- Ensures that the exclusion occurs directly in Jettison and not in
>>> the
>>> internal XMLStreamWriter -->
>>> <property name="dropElementsInXmlStream" value="false" />
>>> <property name="serializeAsArray" value="true"/>
>>>
>>> Let me know if it works
>>> Sergey
>>>
>>
>> Thanks, but I'm afraid it doesn't work for me
>>
>>
>> My code
>>
>> // List<String> card2
>> //CardType has @XmlRootElement annotation
>> List<CardType> list = new ArrayList<CardType>();
>>
>> for (String c2:card2)
>> {
>>       CardType cardType = this.factory.createCardType();
>>       cardType.setIcc(c2);
>>
>>       list.add(cardType);
>> }
>>
>> javax.ws.rs.core.Response r =
>> this.client.path("/temp").postCollection(list,CardType.class);
>> //
>>
>>
>> Without   <property name="dropElementsInXmlStream" value="false" />
>>
>>
>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>
>>
>> With  <property name="dropElementsInXmlStream" value="false" />
>>
>>   {"cardType":[8934077600006637935,"22222222222222222222"]}
>>
>>
>> Note thart "icc" fieldname is missing
>>
>>
>>
>> I'll try to upgrade to jettison 1.3.7 and cxf 2.7.10 ( if you think
>> that could be the reason of my problem )
>>
>>
>> If you have any JAXB class that I could test , I would appreciate
>>
>> Regards
>>
>>
>>
>>>
>>>
>>> On 22/06/15 12:28, Jose María Zaragoza wrote:
>>>>
>>>>
>>>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>>
>>>>>
>>>>> Hi
>>>>>
>>>>> CXF JettisonProvider is only capable of supporting JAXB-generated
>>>>> events,
>>>>> it
>>>>> does not deal directly with JSONObjects.
>>>>> What is the problem you are seeing with JAXB ? Can not have a sequence
>>>>> starting immediately from "[" ? That should be possible to configure
>>>>> with
>>>>> JettisonProvider with properties like 'dropRootElement': true,
>>>>> dropElementsInXmlStream: false, serializeAsArray: true
>>>>
>>>>
>>>>
>>>> Right: I can not have a sequence starting immediately from "["
>>>>
>>>> My settings :
>>>>
>>>>    <property name="dropRootElement" value="true" />
>>>>    <property name="supportUnwrapped" value="true" />
>>>>    <property name="serializeAsArray" value="true"/>
>>>>    <property name="ignoreEmptyArrayValues" value="true"/>
>>>>
>>>>
>>>> My JAXB class
>>>>
>>>> @XmlRootElement
>>>> @XmlAccessorType(XmlAccessType.FIELD)
>>>> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
>>>> public class CardType
>>>> {
>>>>
>>>> @XmlElement(required = true)
>>>> protected String line;
>>>> @XmlElement(required = true)
>>>> protected String icc;
>>>> @XmlElement(name = "status_code")
>>>> protected String statusCode;
>>>>
>>>>
>>>> The call:
>>>> List<CardType> l = new ArrayList<CardType>();
>>>> ...
>>>> ....
>>>> this.client.path("/temp").postCollection(l, CardType.class);
>>>>
>>>>
>>>> and I send
>>>>
>>>>
>>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>>
>>>> I would like to send
>>>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>>>
>>>>
>>>> Extra: I don't know why it sendsthe first value without quotes ...
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> Cheers, Sergey
>>>>>
>>>>>
>>>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hello:
>>>>>>
>>>>>> I would like to POST a JSON array to a  REST service
>>>>>>
>>>>>> Something like
>>>>>>
>>>>>> [
>>>>>>
>>>>>> {
>>>>>>        "name"  : "xxxxx",
>>>>>>        "value"  : "111111"
>>>>>> },
>>>>>> {
>>>>>>        "name"  : "yyyyyy",
>>>>>>        "value"  : "222222"
>>>>>> }
>>>>>>
>>>>>> ]
>>>>>>
>>>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>>>
>>>>>> I usually implement it by JAXB classes , but I don't get achieving it
>>>>>> If I try with a JSONArray
>>>>>>
>>>>>> this.client.path("/test/").post(myJSONArray)
>>>>>>
>>>>>> I get
>>>>>>
>>>>>> No message body writer has been found for class : class
>>>>>> org.codehaus.jettison.json.JSONArray
>>>>>>
>>>>>>
>>>>>>
>>>>>> Any idea ?
>>>>>>
>>>>>> Thanks and regards
>>>>>>
>>>>>
>>>
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com

Re: POST an JSON array by using Jettison1.3.5

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

Have a look at
https://github.com/apache/cxf/blob/master/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java#L215

Cheers, Sergey
On 22/06/15 15:30, Jose María Zaragoza wrote:
> 2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>> When you use a collection, JSONProvider wraps it internally to support a
>> common path where a JAXB bean is provided and serialized, so
>> 'dropRootElement' drops that internally added root.
>> Create a basic CardTypes bean wrapping a collection, use webClient.post(),
>> and these properties:
>>
>> <property name="dropRootElement" value="true" />
>> <!-- Ensures that the exclusion occurs directly in Jettison and not in the
>> internal XMLStreamWriter -->
>> <property name="dropElementsInXmlStream" value="false" />
>> <property name="serializeAsArray" value="true"/>
>>
>> Let me know if it works
>> Sergey
>>
>
> Thanks, but I'm afraid it doesn't work for me
>
>
> My code
>
> // List<String> card2
> //CardType has @XmlRootElement annotation
> List<CardType> list = new ArrayList<CardType>();
>
> for (String c2:card2)
> {
>       CardType cardType = this.factory.createCardType();
>       cardType.setIcc(c2);
>
>       list.add(cardType);
> }
>
> javax.ws.rs.core.Response r =
> this.client.path("/temp").postCollection(list,CardType.class);
> //
>
>
> Without   <property name="dropElementsInXmlStream" value="false" />
>
>   {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>
>
> With  <property name="dropElementsInXmlStream" value="false" />
>
>   {"cardType":[8934077600006637935,"22222222222222222222"]}
>
>
> Note thart "icc" fieldname is missing
>
>
>
> I'll try to upgrade to jettison 1.3.7 and cxf 2.7.10 ( if you think
> that could be the reason of my problem )
>
>
> If you have any JAXB class that I could test , I would appreciate
>
> Regards
>
>
>
>>
>>
>> On 22/06/15 12:28, Jose María Zaragoza wrote:
>>>
>>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>
>>>> Hi
>>>>
>>>> CXF JettisonProvider is only capable of supporting JAXB-generated events,
>>>> it
>>>> does not deal directly with JSONObjects.
>>>> What is the problem you are seeing with JAXB ? Can not have a sequence
>>>> starting immediately from "[" ? That should be possible to configure with
>>>> JettisonProvider with properties like 'dropRootElement': true,
>>>> dropElementsInXmlStream: false, serializeAsArray: true
>>>
>>>
>>> Right: I can not have a sequence starting immediately from "["
>>>
>>> My settings :
>>>
>>>    <property name="dropRootElement" value="true" />
>>>    <property name="supportUnwrapped" value="true" />
>>>    <property name="serializeAsArray" value="true"/>
>>>    <property name="ignoreEmptyArrayValues" value="true"/>
>>>
>>>
>>> My JAXB class
>>>
>>> @XmlRootElement
>>> @XmlAccessorType(XmlAccessType.FIELD)
>>> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
>>> public class CardType
>>> {
>>>
>>> @XmlElement(required = true)
>>> protected String line;
>>> @XmlElement(required = true)
>>> protected String icc;
>>> @XmlElement(name = "status_code")
>>> protected String statusCode;
>>>
>>>
>>> The call:
>>> List<CardType> l = new ArrayList<CardType>();
>>> ...
>>> ....
>>> this.client.path("/temp").postCollection(l, CardType.class);
>>>
>>>
>>> and I send
>>>
>>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>>
>>> I would like to send
>>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>>
>>>
>>> Extra: I don't know why it sendsthe first value without quotes ...
>>>
>>>
>>>
>>>
>>>
>>>>
>>>> Cheers, Sergey
>>>>
>>>>
>>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>>
>>>>>
>>>>> Hello:
>>>>>
>>>>> I would like to POST a JSON array to a  REST service
>>>>>
>>>>> Something like
>>>>>
>>>>> [
>>>>>
>>>>> {
>>>>>        "name"  : "xxxxx",
>>>>>        "value"  : "111111"
>>>>> },
>>>>> {
>>>>>        "name"  : "yyyyyy",
>>>>>        "value"  : "222222"
>>>>> }
>>>>>
>>>>> ]
>>>>>
>>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>>
>>>>> I usually implement it by JAXB classes , but I don't get achieving it
>>>>> If I try with a JSONArray
>>>>>
>>>>> this.client.path("/test/").post(myJSONArray)
>>>>>
>>>>> I get
>>>>>
>>>>> No message body writer has been found for class : class
>>>>> org.codehaus.jettison.json.JSONArray
>>>>>
>>>>>
>>>>>
>>>>> Any idea ?
>>>>>
>>>>> Thanks and regards
>>>>>
>>>>
>>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: POST an JSON array by using Jettison1.3.5

Posted by Jose María Zaragoza <de...@gmail.com>.
2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
> When you use a collection, JSONProvider wraps it internally to support a
> common path where a JAXB bean is provided and serialized, so
> 'dropRootElement' drops that internally added root.
> Create a basic CardTypes bean wrapping a collection, use webClient.post(),
> and these properties:
>
> <property name="dropRootElement" value="true" />
> <!-- Ensures that the exclusion occurs directly in Jettison and not in the
> internal XMLStreamWriter -->
> <property name="dropElementsInXmlStream" value="false" />
> <property name="serializeAsArray" value="true"/>
>
> Let me know if it works
> Sergey
>

Thanks, but I'm afraid it doesn't work for me


My code

// List<String> card2
//CardType has @XmlRootElement annotation
List<CardType> list = new ArrayList<CardType>();

for (String c2:card2)
{
     CardType cardType = this.factory.createCardType();
     cardType.setIcc(c2);

     list.add(cardType);
}

javax.ws.rs.core.Response r =
this.client.path("/temp").postCollection(list,CardType.class);
//


Without   <property name="dropElementsInXmlStream" value="false" />

 {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}


With  <property name="dropElementsInXmlStream" value="false" />

 {"cardType":[8934077600006637935,"22222222222222222222"]}


Note thart "icc" fieldname is missing



I'll try to upgrade to jettison 1.3.7 and cxf 2.7.10 ( if you think
that could be the reason of my problem )


If you have any JAXB class that I could test , I would appreciate

Regards



>
>
> On 22/06/15 12:28, Jose María Zaragoza wrote:
>>
>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>
>>> Hi
>>>
>>> CXF JettisonProvider is only capable of supporting JAXB-generated events,
>>> it
>>> does not deal directly with JSONObjects.
>>> What is the problem you are seeing with JAXB ? Can not have a sequence
>>> starting immediately from "[" ? That should be possible to configure with
>>> JettisonProvider with properties like 'dropRootElement': true,
>>> dropElementsInXmlStream: false, serializeAsArray: true
>>
>>
>> Right: I can not have a sequence starting immediately from "["
>>
>> My settings :
>>
>>   <property name="dropRootElement" value="true" />
>>   <property name="supportUnwrapped" value="true" />
>>   <property name="serializeAsArray" value="true"/>
>>   <property name="ignoreEmptyArrayValues" value="true"/>
>>
>>
>> My JAXB class
>>
>> @XmlRootElement
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
>> public class CardType
>> {
>>
>> @XmlElement(required = true)
>> protected String line;
>> @XmlElement(required = true)
>> protected String icc;
>> @XmlElement(name = "status_code")
>> protected String statusCode;
>>
>>
>> The call:
>> List<CardType> l = new ArrayList<CardType>();
>> ...
>> ....
>> this.client.path("/temp").postCollection(l, CardType.class);
>>
>>
>> and I send
>>
>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>
>> I would like to send
>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>
>>
>> Extra: I don't know why it sendsthe first value without quotes ...
>>
>>
>>
>>
>>
>>>
>>> Cheers, Sergey
>>>
>>>
>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>
>>>>
>>>> Hello:
>>>>
>>>> I would like to POST a JSON array to a  REST service
>>>>
>>>> Something like
>>>>
>>>> [
>>>>
>>>> {
>>>>       "name"  : "xxxxx",
>>>>       "value"  : "111111"
>>>> },
>>>> {
>>>>       "name"  : "yyyyyy",
>>>>       "value"  : "222222"
>>>> }
>>>>
>>>> ]
>>>>
>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>
>>>> I usually implement it by JAXB classes , but I don't get achieving it
>>>> If I try with a JSONArray
>>>>
>>>> this.client.path("/test/").post(myJSONArray)
>>>>
>>>> I get
>>>>
>>>> No message body writer has been found for class : class
>>>> org.codehaus.jettison.json.JSONArray
>>>>
>>>>
>>>>
>>>> Any idea ?
>>>>
>>>> Thanks and regards
>>>>
>>>
>

Re: POST an JSON array by using Jettison1.3.5

Posted by Sergey Beryozkin <sb...@gmail.com>.
Adding a 'dropElementsInXmlStream':false might be enough without having 
to introduce a dedicated wrapper

Sergey
On 22/06/15 12:48, Sergey Beryozkin wrote:
> When you use a collection, JSONProvider wraps it internally to support a
> common path where a JAXB bean is provided and serialized, so
> 'dropRootElement' drops that internally added root.
> Create a basic CardTypes bean wrapping a collection, use
> webClient.post(), and these properties:
>
> <property name="dropRootElement" value="true" />
> <!-- Ensures that the exclusion occurs directly in Jettison and not in
> the internal XMLStreamWriter -->
> <property name="dropElementsInXmlStream" value="false" />
> <property name="serializeAsArray" value="true"/>
>
> Let me know if it works
> Sergey
>
>
> On 22/06/15 12:28, Jose María Zaragoza wrote:
>> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>> Hi
>>>
>>> CXF JettisonProvider is only capable of supporting JAXB-generated
>>> events, it
>>> does not deal directly with JSONObjects.
>>> What is the problem you are seeing with JAXB ? Can not have a sequence
>>> starting immediately from "[" ? That should be possible to configure
>>> with
>>> JettisonProvider with properties like 'dropRootElement': true,
>>> dropElementsInXmlStream: false, serializeAsArray: true
>>
>> Right: I can not have a sequence starting immediately from "["
>>
>> My settings :
>>
>>   <property name="dropRootElement" value="true" />
>>   <property name="supportUnwrapped" value="true" />
>>   <property name="serializeAsArray" value="true"/>
>>   <property name="ignoreEmptyArrayValues" value="true"/>
>>
>>
>> My JAXB class
>>
>> @XmlRootElement
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
>> public class CardType
>> {
>>
>> @XmlElement(required = true)
>> protected String line;
>> @XmlElement(required = true)
>> protected String icc;
>> @XmlElement(name = "status_code")
>> protected String statusCode;
>>
>>
>> The call:
>> List<CardType> l = new ArrayList<CardType>();
>> ...
>> ....
>> this.client.path("/temp").postCollection(l, CardType.class);
>>
>>
>> and I send
>>
>> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>>
>> I would like to send
>> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>>
>>
>> Extra: I don't know why it sendsthe first value without quotes ...
>>
>>
>>
>>
>>
>>>
>>> Cheers, Sergey
>>>
>>>
>>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>>
>>>> Hello:
>>>>
>>>> I would like to POST a JSON array to a  REST service
>>>>
>>>> Something like
>>>>
>>>> [
>>>>
>>>> {
>>>>       "name"  : "xxxxx",
>>>>       "value"  : "111111"
>>>> },
>>>> {
>>>>       "name"  : "yyyyyy",
>>>>       "value"  : "222222"
>>>> }
>>>>
>>>> ]
>>>>
>>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>>
>>>> I usually implement it by JAXB classes , but I don't get achieving it
>>>> If I try with a JSONArray
>>>>
>>>> this.client.path("/test/").post(myJSONArray)
>>>>
>>>> I get
>>>>
>>>> No message body writer has been found for class : class
>>>> org.codehaus.jettison.json.JSONArray
>>>>
>>>>
>>>>
>>>> Any idea ?
>>>>
>>>> Thanks and regards
>>>>
>>>
>


Re: POST an JSON array by using Jettison1.3.5

Posted by Sergey Beryozkin <sb...@gmail.com>.
When you use a collection, JSONProvider wraps it internally to support a 
common path where a JAXB bean is provided and serialized, so 
'dropRootElement' drops that internally added root.
Create a basic CardTypes bean wrapping a collection, use 
webClient.post(), and these properties:

<property name="dropRootElement" value="true" />
<!-- Ensures that the exclusion occurs directly in Jettison and not in 
the internal XMLStreamWriter -->
<property name="dropElementsInXmlStream" value="false" />
<property name="serializeAsArray" value="true"/>

Let me know if it works
Sergey


On 22/06/15 12:28, Jose María Zaragoza wrote:
> 2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>> Hi
>>
>> CXF JettisonProvider is only capable of supporting JAXB-generated events, it
>> does not deal directly with JSONObjects.
>> What is the problem you are seeing with JAXB ? Can not have a sequence
>> starting immediately from "[" ? That should be possible to configure with
>> JettisonProvider with properties like 'dropRootElement': true,
>> dropElementsInXmlStream: false, serializeAsArray: true
>
> Right: I can not have a sequence starting immediately from "["
>
> My settings :
>
>   <property name="dropRootElement" value="true" />
>   <property name="supportUnwrapped" value="true" />
>   <property name="serializeAsArray" value="true"/>
>   <property name="ignoreEmptyArrayValues" value="true"/>
>
>
> My JAXB class
>
> @XmlRootElement
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
> public class CardType
> {
>
> @XmlElement(required = true)
> protected String line;
> @XmlElement(required = true)
> protected String icc;
> @XmlElement(name = "status_code")
> protected String statusCode;
>
>
> The call:
> List<CardType> l = new ArrayList<CardType>();
> ...
> ....
> this.client.path("/temp").postCollection(l, CardType.class);
>
>
> and I send
>
> {"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}
>
> I would like to send
> [{"icc":8934077600006637935},{"icc":"22222222222222222222"}]
>
>
> Extra: I don't know why it sendsthe first value without quotes ...
>
>
>
>
>
>>
>> Cheers, Sergey
>>
>>
>> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>>
>>> Hello:
>>>
>>> I would like to POST a JSON array to a  REST service
>>>
>>> Something like
>>>
>>> [
>>>
>>> {
>>>       "name"  : "xxxxx",
>>>       "value"  : "111111"
>>> },
>>> {
>>>       "name"  : "yyyyyy",
>>>       "value"  : "222222"
>>> }
>>>
>>> ]
>>>
>>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>>
>>> I usually implement it by JAXB classes , but I don't get achieving it
>>> If I try with a JSONArray
>>>
>>> this.client.path("/test/").post(myJSONArray)
>>>
>>> I get
>>>
>>> No message body writer has been found for class : class
>>> org.codehaus.jettison.json.JSONArray
>>>
>>>
>>>
>>> Any idea ?
>>>
>>> Thanks and regards
>>>
>>


Re: POST an JSON array by using Jettison1.3.5

Posted by Jose María Zaragoza <de...@gmail.com>.
2015-06-22 13:11 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
> Hi
>
> CXF JettisonProvider is only capable of supporting JAXB-generated events, it
> does not deal directly with JSONObjects.
> What is the problem you are seeing with JAXB ? Can not have a sequence
> starting immediately from "[" ? That should be possible to configure with
> JettisonProvider with properties like 'dropRootElement': true,
> dropElementsInXmlStream: false, serializeAsArray: true

Right: I can not have a sequence starting immediately from "["

My settings :

 <property name="dropRootElement" value="true" />
 <property name="supportUnwrapped" value="true" />
 <property name="serializeAsArray" value="true"/>
 <property name="ignoreEmptyArrayValues" value="true"/>


My JAXB class

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CardType", propOrder = { "line", "icc", "statusCode" })
public class CardType
{

@XmlElement(required = true)
protected String line;
@XmlElement(required = true)
protected String icc;
@XmlElement(name = "status_code")
protected String statusCode;


The call:
List<CardType> l = new ArrayList<CardType>();
...
....
this.client.path("/temp").postCollection(l, CardType.class);


and I send

{"cardType":[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]}

I would like to send
[{"icc":8934077600006637935},{"icc":"22222222222222222222"}]


Extra: I don't know why it sendsthe first value without quotes ...





>
> Cheers, Sergey
>
>
> On 22/06/15 11:42, Jose María Zaragoza wrote:
>>
>> Hello:
>>
>> I would like to POST a JSON array to a  REST service
>>
>> Something like
>>
>> [
>>
>> {
>>      "name"  : "xxxxx",
>>      "value"  : "111111"
>> },
>> {
>>      "name"  : "yyyyyy",
>>      "value"  : "222222"
>> }
>>
>> ]
>>
>> I'm using CXF 2.7.8 + Jettison 1.3.5
>>
>> I usually implement it by JAXB classes , but I don't get achieving it
>> If I try with a JSONArray
>>
>> this.client.path("/test/").post(myJSONArray)
>>
>> I get
>>
>> No message body writer has been found for class : class
>> org.codehaus.jettison.json.JSONArray
>>
>>
>>
>> Any idea ?
>>
>> Thanks and regards
>>
>

Re: POST an JSON array by using Jettison1.3.5

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

CXF JettisonProvider is only capable of supporting JAXB-generated 
events, it does not deal directly with JSONObjects.
What is the problem you are seeing with JAXB ? Can not have a sequence 
starting immediately from "[" ? That should be possible to configure 
with JettisonProvider with properties like 'dropRootElement': true, 
dropElementsInXmlStream: false, serializeAsArray: true

Cheers, Sergey

On 22/06/15 11:42, Jose María Zaragoza wrote:
> Hello:
>
> I would like to POST a JSON array to a  REST service
>
> Something like
>
> [
>
> {
>      "name"  : "xxxxx",
>      "value"  : "111111"
> },
> {
>      "name"  : "yyyyyy",
>      "value"  : "222222"
> }
>
> ]
>
> I'm using CXF 2.7.8 + Jettison 1.3.5
>
> I usually implement it by JAXB classes , but I don't get achieving it
> If I try with a JSONArray
>
> this.client.path("/test/").post(myJSONArray)
>
> I get
>
> No message body writer has been found for class : class
> org.codehaus.jettison.json.JSONArray
>
>
>
> Any idea ?
>
> Thanks and regards
>