Как я могу отправить объект с маршализацией JAXB как параметр, используя клиентский API Jetty? - PullRequest
3 голосов
/ 19 июля 2011

... практически я ищу замену EJB-или-SOAP в стиле REST;)


Это позволяет мне получать маршалированный объект 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()), сервер не понимает запрос, даже когда все другие (обычные) сжатые запросы в порядке.

Клиентская сторона

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
    }
}
...