I THINK this is an artifact of how jettison works. You might want to
ask on the jettison list though. Basically, if jettison sees two
elements of the same name in a row, it's an array, otherwise, it's a
single value.
Dan
On Jul 18, 2008, at 3:14 PM, Joe Sunday wrote:
Is there a way to make this do the right thing?
If I have a schema like this:
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="Foo" type="xs:string" minOccurs="1"
maxOccurs="1"/>
<xs:element name="Bar" type="xs:string" minOccurs="1"
maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ArrayOfA">
<xs:complexType>
<xs:sequence>
<xs:element ref="A" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
and a REST method returning an ArrayOfA, I get structurally
different results depending on if there's one A or more than one A
in the result:
$ curl http://localhost:2259/myService/single
{"s.ArrayOfA":{"s.A":{"s.Foo":"foo","s.Bar":"bar"}}}
$ curl http://localhost:2259/myService/multiple
{"s.ArrayOfA":{"s.A":[{"s.Foo":"foo1","s.Bar":"bar1"},
{"s.Foo":"foo2","s.Bar":"bar2"}]}}
In the first case, I get a Javascript object 'A' that has Foo and
Bar directly on it. In the latter, that same object is the array I
was expecting. So everywhere I get an object like this back from my
service, I have to explicitly check if it's the first or second case
and handle it slightly differently, rather than just iterating over
A even if it's an array with one element.
--Joe
---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog