我正在尝试了解更多来自soap-rpc背景的restlet。我似乎无法弄清楚如何做(也许是不可能)的一件事是修改请求上的对象或发送带有修改的复制版本。
我正在尝试做这样的事情:
public interface AddressService {
@Get
Address addOnZipCode( Address address );
}
服务器将部署在实现中,客户端可以使用动态代理来完成其工作。
服务器启动很好但是当客户端进行调用时,服务器上没有指示正在调用实现方法。此外,在对服务器的调用返回之前,客户端不会出错 - 返回的对象为空?!?
我正在尝试使用restlet做什么?如果是这样,任何关于我可能做错的想法?
如有必要,我可以发布更多代码。
提前致谢。
编辑#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 Web服务的可行替代方案。
编辑#2: 看起来这可能基于书中的例子:“Restlets in Action”
public interface AccountsResource {
@Get("txt")
public String represent();
@Post("txt")
public String add(String account);
}
编辑#3:
事实证明,简单地点击我的Eclipse控制台中的“停止”按钮并没有关闭服务器实例。打开浏览器到服务器URL显示了一些可疑的结果 - 有多个旧服务器实例正在运行。把它们全部关闭之后我开始工作了。最终答案是使用@Post
代替@Get1
。
答案 0 :(得分:1)
看看这个:
http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet/303-restlet.html
在服务器端,您的实现必须如此:
class AddressServerResource extends ServerResource implements AddressService {
// implementation
}
在客户端:
ClientResource cr = new ClientResource("http://your-api.com/address/123");
AddressService service = cr.wrap(AddressService.class);
// use the service transparently
编辑:
@Post
Address addOnZipCode( Address address );