2015-06-22 13:48 GMT+02:00 Sergey Beryozkin <[email protected]>:
> 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 <[email protected]>:
>>>
>>> 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
>>>>
>>>
>