2

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 を使用する必要があります。

4

0 に答える 0