Java の useSystemProxy-Feature を RESTeasy の ClientRequest クラスと組み合わせると、次のような問題が発生します。
ClientRequest request = new ClientRequest(Config.getInstance().getProperty(Config.UPDATE_URL));
ClientResponse<FullscreenUpdateTransfer> response = request.get(FullscreenUpdateTransfer.class);
if (response.getStatus() != Response.Status.OK.getStatusCode())
{
throw new Exception("HTTP Status Response: " + response.getStatus());
}
約 1 分後にスローします。
java.net.SocketException: Malformed reply from SOCKS server
at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:429)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:249)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:121)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at org.jboss.resteasy.client.core.executors.ApacheHttpClientExecutor.execute(ApacheHttpClientExecutor.java:64)
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:39)
at org.jboss.resteasy.plugins.interceptors.encoding.AcceptEncodingGZIPInterceptor.execute(AcceptEncodingGZIPInterceptor.java:40)
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:45)
at org.jboss.resteasy.client.ClientRequest.execute(ClientRequest.java:448)
at org.jboss.resteasy.client.ClientRequest.httpMethod(ClientRequest.java:655)
at org.jboss.resteasy.client.ClientRequest.get(ClientRequest.java:483)
at org.jboss.resteasy.client.ClientRequest.get(ClientRequest.java:503)
at de.taf.easygo.modules.dfimanager.database.logic.Update.run(Update.java:110)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
そのため、Apache HTTP Client は RESTeasy によって SOCKS プロキシを使用するように指示されているようです。(スタック トレースを読み直したところ、Socket は Apache HTTP クライアントによって SOCKS プロキシを使用するように命令されているようです。) しばらくの間、解決策を探していました。HttpUrlConnection を使用して何度も回避し、手動で結果を JaxbContext に渡しました。特にPUTリクエストに関してはあまり便利ではないので、誰かがこれを解決したかどうか尋ねたい.
当然のことながら、これにはテスト済み/動作中の HTTP プロキシを使用しています。
proxyHost/proxyPort プロパティを介してプロキシを提供するオプションはありません。java.net.useSystemProxies を使用する必要があります。