我正在使用 Jersey 1.1(旧的,我知道 - 因为我坚持使用 Java 1.5)。我正在做一个简单的 GET,其中一个 Java 对象作为实体返回。Java 对象正在正确编组(Java 到 XML),因为我可以通过 Web 发出 GET 请求并且效果很好。我正在尝试使用 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;
}
}
谢谢!