users@jaxb.java.net

JSON unmarshaling problem

From: Christopher Schmidt <fakod666_at_googlemail.com>
Date: Thu, 9 Dec 2010 10:08:45 +0100

Hi all, I want to create Xml root elements for the following JSON structure:

[ {
  "start" : "http://localhost:7474/db/data/node/3",
  "nodes" : [ "http://localhost:7474/db/data/node/3", "
http://localhost:7474/db/data/node/1" ],
}, {
  "start" : "http://localhost:7474/db/data/node/3",
  "nodes" : [ "http://localhost:7474/db/data/node/3", "
http://localhost:7474/db/data/node/2" ],
} ]

I am using a REST interface, Jersey as REST client library and Scala. If I
use Scala objects like these:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
class GetPath {
  var array:java.util.List[TraversePath] = _
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
class TraversePath {
  var start:String = _
  var nodes . . .
}

I get the following error:

java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(ArrayList.java:324)
at
com.sun.jersey.json.impl.reader.JsonXmlStreamReader.valueRead(JsonXmlStreamReader.java:162)
at
com.sun.jersey.json.impl.reader.JsonXmlStreamReader.readNext(JsonXmlStreamReader.java:327)
at
com.sun.jersey.json.impl.reader.JsonXmlStreamReader.readNext(JsonXmlStreamReader.java:175)
at
com.sun.jersey.json.impl.reader.JsonXmlStreamReader.next(JsonXmlStreamReader.java:445)
at
com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:192)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
at
com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalJAXBElementFromJSON(BaseJSONUnmarshaller.java:103)
at
com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalFromJSON(BaseJSONUnmarshaller.java:92)
at
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider.readFrom(JSONRootElementProvider.java:100)
at
com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:106)
at
com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:549)
at
com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:502)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:560)

Any advice?

-- 
Christopher
twitter: @fakod
blog: http://blog.fakod.eu