如何使用Jetty客户端API将JAXB-marshalled对象作为参数发送?

时间:2011-07-19 09:57:09

标签: java jaxb jersey jax-rs

......实际上我正在寻找一种REST风格的EJB或SOAP替代品;)


这使我能够从服务器

接收JAXB编组的对象

客户端

WebResource r = client.resource("http://localhost:9999/resource1");

SomeObject in = r.post(SomeObject.class);

服务器端

@Path("/")
public static final class TestResource {
    @Path("resource1")
    @POST
    public SomeObject resource1() {
        return new SomeObject("Object1");
    }
}

以下是如何发送JAXB编组对象的示例...

...当它是唯一(未命名)参数时。
我甚至不知道这种行为是否有意。有一件事不起作用:当客户端使用client.addFilter(new GZIPContentEncodingFilter())时,服务器不理解请求,即使所有其他(通常)gzip压缩请求都没问题。

客户端

WebResource r = client.resource("http://localhost:9999/resource2");

SomeObject out = new SomeObject("no name");

SomeObject in = r.post(SomeObject.class, out /*!!!*/);

服务器端

@Path("/")
public static final class TestResource {
    @Path("resource2")
    @POST
    public SomeObject resource2(SomeObject o) {
        o.setName("NEW NAME!"); // "modify" object
        return o; // send back
    }
}

同样,这种行为似乎不一致,甚至无意。为什么gzip内容编码过滤器在这里失败呢? 有人可以对此发表评论吗?


但是我如何发送这样的对象作为请求参数

客户端

WebResource r = client.resource("http://localhost:9999/resource3");

SomeObject out = new SomeObject("no name"); // this would be the sent param
r. /* some magic method to add a JAXB-marshalled object as parameter */ (out);

SomeObject in = r.post(SomeObject.class); // this receives the "modified" object

服务器端

@Path("/")
public static final class TestResource {
    @Path("resource3") // ??? have something to happen to the URI?
    @POST
    // which kinds of Param? Path? Query? Form? Matrix? Something else?
    public SomeObject resource3(@PathParam("a") SomeObject o) {
        o.setName("NEW NAME!"); // "modify" object
        return o; // send back
    }
}

0 个答案:

没有答案