私はJersey 1.1を使用しています(古い、私は知っています-Java 1.5で立ち往生しているため、そうしなければなりません)。Java オブジェクトがエンティティとして返される単純な GET を実行しています。Web 経由で GET 要求を行うことができ、うまく機能するため、Java オブジェクトは正しく (Java から XML に) マーシャリングされています。Jersey クライアントを使用して GET リクエストを作成し、それをアンマーシャリングして Java オブジェクトに戻そうとしていますが、ここで失敗しています。正しく注釈が付けられているため、Jersey は GET 要求から受け取った XML をアンマーシャリングして POJO に戻す方法を知っているべきではありませんか? サーバー側で動作します。これが私が得る例外です:
ClientHandlerException: A message body reader for Java type, class my.class.SearchResult, and MIME media type, application/xml was not found.
クライアントコードは次のとおりです。
private SearchResult search() {
WebResource wr = new Client().resource( "http://localhost:8080/MyProject/search" );
return wr.get( SearchResult.class );
}
クライアントとサーバーで使用している JAXB アノテーション付き POJO は次のとおりです。
@XmlRootElement(name = "searchResults")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "searchResults", propOrder = {
"results"
})
public class SearchResult {
@XmlElement(name = "result")
private List<Result> results = new ArrayList<Result>();
public List<Result> getResults() {
return results;
}
...
}
内部の Result POJO も次のとおりです。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "resultType", propOrder = {
"name",
"version",
"type"
})
public class Result {
private String name;
private String version;
private String type;
...
}
GET サービス自体は次のとおりです。
@Path("/search")
public class SearchRest {
@GET
@Produces(MediaType.APPLICATION_XML)
public SearchResult search() {
SearchResult result = new SearchResult();
....
return result;
}
}
ありがとうございました!