2017-01-12 75 views
2

我可以成功達到預定可使用不同的瀏覽器下的OData服務,並利用郵差甚至讓我在代理: String SERVICE_ROOT =http://services.odata.org/V4/TripPinService/如何使用Apache Olingo背後的代理

然而,使用Apache Olingo在Java中,我無法訪問此服務。

JVM參數如-Dhttp.proxySet=true -Dhttp.proxyHost=http-proxy.example.com -Dhttp.proxyPort=8080允許我執行基本的URL功能,例如檢索HTTP狀態代碼(谷歌返回200)。不過,使用ODataClient訪問OData-Service是不可能的(下面的代碼)。沒有錯誤被拋出。

ODataClient client = ODataClientFactory.getClient(); 
ODataServiceDocumentRequest request = client.getRetrieveRequestFactory().getServiceDocumentRequest(SERVICE_ROOT); 
ODataRetrieveResponse<ClientServiceDocument> response = request.execute(); 

我嘗試使用內Olingo代理能力,但是沒有成功:

client.getConfiguration().setHttpClientFactory(new ProxyWrappingHttpClientFactory(URI.create("http://http-proxy.example.com:8080"))); 

什麼我做錯了,我已經離開了哪些選擇?

非常感謝。

回答

1

如果您位於NTLM代理的後面,則可以嘗試使用NTLMAuthHttpClientFactory。

NTLMAuthHttpClientFactory ntlm = new NTLMAuthHttpClientFactory(username, password, workstation, domain); 
client.getConfiguration().setHttpClientFactory(ntlm); 

如果不工作,你可以用cntlm嘗試。安裝它,更改用戶名,密碼,域和代理C:\Program Files (x86)\Cntlm\cntlm.ini,然後調用net start cntlm。 用於Olingo:

client.getConfiguration().setHttpClientFactory(new ProxyWrappingHttpClientFactory(URI.create("http://localhost:3128"))); 
+0

感謝您的意見。我自己解決了這個問題。不過,我接受了你的回答,因爲我非常感謝你的意見。謝謝! :) –

+0

謝謝!我遇到了類似的問題,在尋找解決方案時,我偶然發現了你的問題。上面提出的方法解決了我的情況。 – GeoK

0

我不知何故自己解決了這個問題。在VM參數我現在只有

-Djava.net.preferIPv4Stack=true 

而且我只在應用程序中定義的代理配置:

client = ODataClientFactory.getClient(); 
    client.getConfiguration().setHttpClientFactory(
      new ProxyWrappingHttpClientFactory(URI.create("http-prox.example.com:8080"))); 

這爲我工作。 :)