Я пытаюсь узнать о рестлетах больше, исходя из фона мыла-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.