1

XML 形式で従業員の java.util.list を返す JAX-RS サービス (ジャージ実装) にアクセスしようとしています。

Service メソッドのシグネチャは次のようになります。

@GET
@Path("/getEmployeeListXML")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_XML)
public List<EmployeeXML> getEmployeeListXML(@QueryParam("id") String id){
    //Some code which returns a List<EmployeeXML>
}

返される XML の形式は次のようになります。

<employeeXMLs>
    <employeeXML>
            <empId>1</empId>
            <empName>John</empName>
            <empAge>35</empAge>
            <empSex>Male</empSex>
    </employeeXML>
    <employeeXML>
            <empId>2</empId>
            <empName>Lisa</empName>
            <empAge>23</empAge>
            <empSex>Female</empSex>
    </employeeXML>
</employeeXMLs>

ジャージ クライアントからこれにアクセスするために、次のコードを使用しています。

List<EmployeeXML> empListXML = (List<EmployeeXML>)service.path("rest").path("GetService").path("getEmployeeListXML").accept(MediaType.APPLICATION_XML).get(EmployeeXML.class);

戻り値の型はリストである必要があるため、これは正しくありませんが、get メソッドでは現在、単一のオブジェクトを取得しようとしています。ここでクライアントからリストを取得する方法がわかりません:(

この例外が発生しています:

 unexpected element (uri:"", local:"employeeXMLs"). Expected elements are <{}employeeListXML>,<{}employeeXML>

この仕事をするために私を助けてください。

ありがとう、

4

2 に答える 2

4

このクラスを使用してGenericType、オブジェクトのリストを取得できます。

List<EmployeeXML> empListXML = (List<EmployeeXML>)service.path("rest").path("GetService").path("getEmployeeListXML").accept(MediaType.APPLICATION_XML).get(new GenericType<List<EmployeeXML>>(){});
于 2013-02-27T14:11:18.813 に答える
3

クライアント クラスで戻り値の型を定義するには、「スーパータイプ トークン」を使用する必要があります。

List<EmployeeXML> empListXML = service
    .path("rest")
    .path("GetService")
    .path("getEmployeeListXML")
    .accept(MediaType.APPLICATION_XML)
    .get(new GenericType<List<EmployeeXML>>() {});

スーパータイプ トークンは、Jersey がサーバーの応答を逆シリアル化するときに使用する汎用パラメーター情報を「保持」するために必要です。

于 2013-02-27T14:05:59.173 に答える