Я играл с "снизу вверх" JAX-WS и столкнулся с чем-то странным при запуске wsgen.
Если у меня есть класс обслуживания, который делает что-то вроде:
@WebService
public class Foo {
public ArrayList<Bar> getBarList(String baz) { ... }
}
затем, запустив wsgen, я получаю FooService_schema1.xsd, который имеет что-то вроде этого:
<xs:complexType name="getBarListResponse">
<xs:sequence>
<xs:element name="return" type="tns:bar" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
, что кажется разумным.
Однако, если я хочу коллекцию коллекций, такую как:
public BarCollection getBarCollection(String baz) { ... } // BarCollection is just a container for an ArrayList<Bar>
тогда генерируемая схема заканчивается такими вещами, как:
<xs:complexType name="barCollection">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getBookCollectionsResponse">
<xs:sequence>
<xs:element name="return" type="tns:barCollection" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Пустая последовательность не , что я имел в виду.
Мой оригинальный подход заключался в следующем:
public ArrayList<ArrayList<Bar>> getBarLists(String baz) { ... }
но это заканчивается большой цепочкой сложных типов, которые также заканчиваются пустой последовательностью в конце:
<xs:complexType name="getBarListsResponse">
<xs:sequence>
<xs:element name="return" type="tns:arrayList" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="arrayList">
<xs:complexContent>
<xs:extension base="tns:abstractList">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="abstractList" abstract="true">
<xs:complexContent>
<xs:extension base="tns:abstractCollection">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="abstractCollection" abstract="true">
<xs:sequence/>
</xs:complexType>
Я что-то упустил или это известная дыра в wsgen? JAXB?
Andy