找不到Java类型的消息正文编写器,类myPackage.Sample和MIME媒体类型application / xml

时间:2014-01-01 11:20:29

标签: java spring web-services rest

我正在使用Jersey RESTful网络服务。我写了如下的客户端,但它抛出了我在标题中提到的异常。

public class MyRestClient {
    public static void main(String[] args) {    
        Client client = Client.create();        
        WebResource resource = client.resource("http://localhost:8080/myapp/rest/a/update/123");    
        Sample b1 = new Sample("debris");     
        ClientResponse response = resource.type(MediaType.APPLICATION_XML).put(ClientResponse.class, b1);

    }
}

有人告诉使用 @XmlRootElement 注释Sample类。但是我不能这样做,因为Sample是由第三方生成的。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

如果没有看到您的REST服务类,这有点难以回答,但我猜您正在尝试将您的数据用作服务中的Sample对象,如下所示:

@PUT
public Response updateSample(Sample sample) {
...

但是这依赖于Jersey能够自动将您的XML数据编组到Sample对象中,正如您所指出的那样,需要在Sample类上使用JAXB注释,并且由于缺少这些注释,您将收到您描述的错误。

相反,您可以在服务中将其作为String使用,如下所示:

@PUT
public Response updateSample(String sampleStr) {
...

但现在您负责将sampleStr数据解析为xml并将其转换为Sample对象(这不一定是坏事)。但是,由于Sample类没有注释XML,因此Jersey甚至无法将其转换为XML以供客户端发送。

有关使用Jersey REST服务来回传输数据的不同方法的更多信息,请参阅此文章:http://usna86-techbits.blogspot.com/2013/08/restful-java-web-service-marshalling.html

如果您将数据作为JSON传递,则可以更轻松地在服务器上手动处理它。查看该文章底部的JUnit测试类,了解如何执行此操作。

如果您需要更多帮助,请提供您的服务等级。