我一直在玩“自下而上”的 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) { ... }
但最终会产生一大串 complexTypes,最后也只是一个空序列:
<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?
安迪