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 <sberyoz...@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 <sberyoz...@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

Reply via email to