... практически я ищу замену 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
}
}