jsonリストを返す残りのWebサービス(ジャージー付き)があります。直接呼び出すと、正確にこれが返されます:
[{"success":false,"uri":"foo:22","message":"Unknown host : foo"},{"success":true,"uri":"localhost:8082","message":null}]
このスニペットによって生成されます:
@GET
@Path("/opening/")
public List<OpeningResult> testOpenings(@QueryParam("uri") List<String> uris) {
LOG.debug("testOpenings request uris :[" + uris + "]");
List<OpeningResult> openingResults = infoService.testOpenings(uris);
return openingResults;
}
これは、次のような Pojo のコレクションです。
@XmlRootElement(name = "OpeningResult")
public class OpeningResult {
attributes
...
getter/setter
}
この Pojo は、サーバーとクライアントの間で共通の jar を介して共有されます。
私はこのスニペットでWebサービスを呼び出します:
Client client = Client.create();
WebResource resource = client.resource("http://localhost:8080/scheduler/rest/opening");
MultivaluedMap<String, String> params = new MultivaluedMapImpl();
for (String uri : uris) {
params.add("uri", uri);
}
List<OpeningResult> results = newArrayList(resource.queryParams(params).get(OpeningResult[].class));
サーバー側にいくつかのトレースを追加します。残りのサービスが適切なパラメーターで呼び出されていることがわかりますが、クライアント側では次のエラーが発生します。
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"success"). Expected elements are <{}OpeningResult>
どこから来たのかわかりませんか?