Restlet修改入站对象并将其返回或返回新副本?

时间:2011-05-26 00:07:51

标签: java restlet

我正在尝试了解更多来自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

1 个答案:

答案 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 );