Я пытаюсь узнать больше о рестлетах, происходящих из мыла-rpc. Одна вещь, которую я не могу понять, как это сделать (и, возможно, не возможно), это изменить объекты по запросам или отправить обратно скопированную версию с изменениями.
Я пытаюсь сделать что-то вроде этого:
public interface AddressService {
@Get
Address addOnZipCode( Address address );
}
Сервер будет развернут с реализацией, и клиент сможет использовать динамические прокси для своей работы.
Сервер запускается просто отлично, но когда клиент выполняет вызов, на сервере нет указаний на то, что вызывается метод реализации. Кроме того, клиент не выдает ошибку до тех пор, пока не будет возвращен вызов на сервер - возвращенный объект будет нулевым?!?
Возможно ли то, что я пытаюсь здесь сделать, с помощью рестлетов? Если да, есть идеи, что я могу делать не так?
Я могу выложить больше кода, если необходимо.
Заранее спасибо.
РЕДАКТИРОВАТЬ # 1:
Я даже пытался упростить его, чтобы не использовать пользовательские объекты:
@Post
String execute( String message );
Я получаю следующее:
INFO: Starting the default HTTP client
Exception in thread "main" Method Not Allowed (405) - Method Not Allowed
at org.restlet.resource.ClientResource$1.invoke(ClientResource.java:1615)
at $Proxy5.execute(Unknown Source)
Я начинаю думать, что это невозможно, поэтому мне трудно понять, насколько это жизнеспособная альтернатива веб-сервисам SOAP + RPC.
РЕДАКТИРОВАТЬ # 2:
Похоже, это возможно на основе примеров из книги: «Рестлеты в действии»
public interface AccountsResource {
@Get("txt")
public String represent();
@Post("txt")
public String add(String account);
}
РЕДАКТИРОВАТЬ # 3:
Оказывается, что простое нажатие кнопки «Стоп» в моей консоли Eclipse не завершало работу экземпляра сервера. Открытие браузера по URL-адресу сервера показало некоторые странные результаты - было запущено несколько старых экземпляров сервера. После того, как они закрыли их все, я заставил это работать. В конечном итоге ответом было использование @Post
вместо @Get1
.