0

在我的应用程序中,我有许多带有分页的表,因此我创建了一个类来保存部分结果列表和分页查询的结果总数:

@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 来部署我的项目。

4

1 回答 1

0

只是一个疯狂的猜测 - 制作PaginatedList到一个界面会有所作为吗?

因此,使接口IPaginatedList<T>具有IPaginatedList<EmployeeType> getPaginatedList();并且具有public class PaginatedList<T> implements Serializable, IPaginatedList(或将您的类重命名为PaginatedListImpl<T> implements Serializable, IPaginatedList并将 PaginatedList 保留为接口 - 更容易更改(可能是第二个))

于 2013-05-04T01:12:39.460 回答