私のアプリケーションには、ページ付けされたテーブルがたくさんあるので、ページ付けされたクエリの結果の部分的なリストと結果の総数を保持するクラスを作成しました。
@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>
問題はこれです: Web サービスの応答から型情報を失わないようにするにはどうすればよいでしょうか? List の XSD 生成を「シミュレート」するために必要な JAXB マジックはありますか。任意の推奨事項を歓迎します。
違いがある場合は、Weblogic 10.3 を使用してプロジェクトをデプロイしています。