在我的应用程序中,我有许多带有分页的表,因此我创建了一个类来保存部分结果列表和分页查询的结果总数:
@XmlRootElement(name = "paginatedList")
public class PaginatedList<T> implements Serializable {
private List<T> results;
private Integer totalSize;
@XmlElement(name = "result")
public List<T> getResults() {
return this.results;
}
@XmlElement(name = "totalSize")
public int getTotalSize() {
return totalSize;
}
// Setters, constructors, etc.
}
然后我将以下方法公开给 EJB:
PaginatedList<EmployeeType> getPaginatedList();
此外,我用 Web 服务公开了这个方法。但是为 Web 服务响应生成的 XSD 会丢失类型信息 ( EmployeeType
):
<xs:complexType name="getPaginatedListResponse">
<xs:sequence>
<xs:element name="return" type="tns:paginatedList" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="paginatedList">
<xs:sequence>
<xs:element name="result" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="totalSize" type="xs:int"/>
</xs:sequence>
</xs:complexType>
我知道这可能是由于类型擦除而发生的,但如果我只返回如下列表:
List<EmployeeType> getList();
我得到了一个更好的 XSD:
<xs:complexType name="getListResponse">
<xs:sequence>
<xs:element name="return" type="tns:employeeType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="employeeType">
<xs:sequence>
<xs:element name="id" type="xs:int" minOccurs="0"/>
<xs:element name="name" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
所以问题是这样的:我应该怎么做才能不丢失我的网络服务响应中的类型信息?为了“模拟” List 的 XSD 生成,我应该做任何 JAXB 魔术吗?欢迎任何建议。
如果有什么不同,我正在使用 Weblogic 10.3 来部署我的项目。