2

这基本上让我不知所措,并且已经将近一个星期。我正在研究公司架构的一部分,试图将 REST 全部设置好。javax.ws.rs 包中没有两种方法 - SEARCH 和 PATCH。我在我们的项目中创建了以下接口来实现搜索:(主要是示例的复制/粘贴)

/** imports and such as appropriate **/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("SEARCH")
public @interface SEARCH {

}

如果直接调用它,使用它的代码可以完美地工作。但是,与主服务对话的 Web 服务每次都会失败500 Invalid HTTP method: SEARCH。因此,需要明确的是,有两个支持 Web 的服务。使用上述代码的第一个工作正常。第二个,应该只是第一个服务的代理失败。

有问题的第二个服务在码头上运行。进行代理的 servlet 是 org.mortbay.servlet.ProxyServlet 的扩展——唯一的覆盖是在 init 和 proxyHttpUrl 上进行一些 URL 调整。我知道第二个服务没有将响应传递给第一个,因为我可以关闭第一个,而第二个仍然给我那个错误。

我的问题是,我是否缺少启用“自定义”(即不在 javax.ws.rs 包中)http 方法的配置片段?

4

1 回答 1

1

首先,除非我弄错了,否则代理 servlet 代码非常旧,来自 jetty-6。我们现在已经发布了 jetty-9,并且最后三个版本的 jetty 都来自 eclipse,所以你应该使用的 ProxyServlet 是 org.eclipse.jetty.servlets.ProxyServlet 类。

现在,从 jetty-7 开始,我们为该代理 servlet 添加了一些自定义项,因此您可以修改更多的客户端交换……您可能需要利用它来使其他 http 方法正常工作。可能是 http-client 仅排除标准 http 方法,在这种情况下,我们必须为您的用例修复它(如果是这种情况 ,请在 RT/Jetty 下的 bugs.eclipse.org 上打开一个错误)。

于 2013-03-28T13:15:51.997 回答