Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Restlet修改入站对象并返回它还是返回新副本?_Java_Restlet - Fatal编程技术网

Java Restlet修改入站对象并返回它还是返回新副本?

Java Restlet修改入站对象并返回它还是返回新副本?,java,restlet,Java,Restlet,我试图从soap-rpc背景了解更多关于restlet的知识。有一件事我似乎不知道该怎么做(也许是不可能的),那就是根据请求修改对象,或者发回经过修改的复制版本 我正在尝试这样做: public interface AddressService { @Get Address addOnZipCode( Address address ); } 服务器将与实现一起部署,客户端可以使用动态代理来完成其工作 服务器启动正常,但当客户端进行调用时,服务器上没有指示正在调用实现方法。此外

我试图从soap-rpc背景了解更多关于restlet的知识。有一件事我似乎不知道该怎么做(也许是不可能的),那就是根据请求修改对象,或者发回经过修改的复制版本

我正在尝试这样做:

public interface AddressService {
    @Get
    Address addOnZipCode( Address address );
}
服务器将与实现一起部署,客户端可以使用动态代理来完成其工作

服务器启动正常,但当客户端进行调用时,服务器上没有指示正在调用实现方法。此外,在对服务器的调用返回之前,客户端不会出错-返回的对象为null

我在这里尝试用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: 根据《RESTlet在运行》一书中的例子,这似乎是可能的

编辑#3: 事实证明,简单地点击Eclipse控制台中的“停止”按钮并没有关闭服务器实例。打开服务器URL的浏览器会显示一些可疑的结果-有多个旧服务器实例正在运行。把它们都关掉后,我让它开始工作了。最终的答案是使用
@Post
而不是
@Get1

看看这个:

在服务器端,您的实现必须如下所示:

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
编辑:

看看这个:

在服务器端,您的实现必须如下所示:

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
编辑:


这就是我现在正在做的。不幸的是,没有一个示例同时接收和返回一个值。啊,你不能在
Get
方法中传递一个值。文档中没有明确说明这一点,但我在使用Restlet几周后意识到,
Get
HTTP方法不允许请求主体。RESTlet使用内容协商将请求体转换为Java对象。您只能在
PUT
POST
方法中传递参数。我现在遇到了一个405错误-您似乎无法使用注释,至少根据这个方法[或者你可以,我不知道怎么做。这就是我现在正在做的。不幸的是,没有一个示例同时接收和返回一个值。啊,你不能在
Get
方法中传递一个值。这在文档中没有明确说明,但我在使用Restlet几周后意识到。
Get
HTTP方法不允许w表示请求体。请求体是RESTlet使用内容协商将其转换为Java对象的对象。您只能在
PUT
POST
方法中传递参数。我现在遇到了一个405错误-似乎您不能使用注释,至少根据这个方法可以这样做[或者您可以,我不确定如何使用]。