2013-12-08 35 views
1

我正在寫使用Apache HTTPComponents 4.3(JAVA)的的HttpCore庫的HTTP服務器。我的服務器必須能夠接收具有非標準HTTP方法(GET,POST,DELETE等以外的方法)的請求。非標準的HTTP方法和Apache HTTP組件

但是,當我的服務器接收到這樣的請求,將返回響應「不支持方法」。有沒有辦法強制HTTPComponents接受非標準的HTTP方法?

背景:我正在執行一個WebDAV服務器,它採用非標準方法(如MKCOL和PROPFIND)。

謝謝

+0

哪個版本HTTPComponents庫您使用? v4 +在處理像WebDAV這樣的自定義實現方面要好得多。 – brandonscript

+0

看起來像阿帕奇有你覆蓋,發現兔崽子項目http://jackrabbit.apache.org/我還沒有使用它,但它看起來像一個良好的開端找 –

+0

@ r3mus哎呀對不起,忘了,包括版本。我正在使用HttpCore的4.3版本。而且我不在尋找WebDAV實現。我正在編寫自己的個人項目。 – Michael

回答

2

我找到了解決方案,所以我會回答我自己的問題。的xD

你必須創建自己的HttpRequestFactory實現,並通過它的鏈條。

HttpRequestFactory reqFact = new HttpRequestFactory() { 
    public HttpRequest newHttpRequest(final RequestLine requestline) throws MethodNotSupportedException { 
    return new BasicHttpEntityEnclosingRequest(requestline); 
    } 

    public HttpRequest newHttpRequest(final String method, final String uri) throws MethodNotSupportedException { 
    return new BasicHttpEntityEnclosingRequest(method, uri); 
    } 
}; 
HttpMessageParserFactory<HttpRequest> parserFact = new DefaultHttpRequestParserFactory(null, reqFact); 
HttpConnectionFactory<DefaultBHttpServerConnection> connFact = new DefaultBHttpServerConnectionFactory(null, parserFact, null) 

該HttpComponents默認使用的實現拋出一個MethodNotSupportedException如果一個非標準的HTTP方法被發現。默認實現的源代碼可以在這裏找到:

http://hc.apache.org/httpcomponents-core-4.3.x/httpcore/xref/org/apache/http/impl/DefaultHttpRequestFactory.html