2013-03-27 15 views
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方法?

回答

1

首先,代理servlet代碼是非常古老的,除非我錯了,否則從jetty-6開始。現在我們已經發布了jetty-9,最後三個jetty版本來自eclipse,所以你應該使用的ProxyServlet是org.eclipse.jetty.servlets.ProxyServlet類。

現在,從jetty-7開始,我們爲該代理servlet添加了一些自定義功能,以便您可以修改更多的客戶端交換...並且您可能需要使用它來獲取其他http方法。這可能是因爲http-client只是使用標準http方法,在這種情況下,我們必須解決這個問題(如果是這種情況,則使用open a bug at bugs.eclipse.org under RT/Jetty)。