【问题标题】:SocketTimeoutException after connecting via proxy with authentication使用身份验证通过代理连接后的 SocketTimeoutException
【发布时间】:2016-10-19 13:19:29
【问题描述】:

我编写了与非公共网络服务通信的代码,即使通过代理连接,一切似乎也能正常工作。问题在更改为授权代理后开始。我收到以下警告:

WARN  [HttpMethodDirector] Required credentials not available for BASIC <any realm>@destination.url.com:80
WARN  [HttpMethodDirector] Preemptive authentication requested but no default credentials available

之后抛出异常:java.net.SocketTimeoutException: Read timed out

“destination.url.com”是目标地址,所以我想我经过了代理。

我在 stackoverflow 上的某处读到,在不需要传递用户名/密码时通常会抛出此警告。我不知道这是不是真的。 Using HttpProxy to connect to a host with preemtive authentication

这里有些人也指出了同样的问题,但可以通过通过未经身份验证的代理运行到经过身份验证的远程存储库来重现。我的情况正好相反。目的地不需要授权(授权数据被放入 SOAP 消息的正文中)。 https://www.jfrog.com/jira/browse/RTFACT-4147

任何想法如何帮助我的情况?这是我的一些代码:

MyStub stub = new MyStub();
Options Options = stub._getServiceClient().getOptions();

Options.setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,"utf-8");
Options.setProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA,org.apache.axis2.Constants.VALUE_FALSE);

HttpTransportProperties.ProxyProperties proxyProperties = new HttpTransportProperties.ProxyProperties();
proxyProperties.setProxyName("proxyAddress");
proxyProperties.setProxyPort("proxyPort");
proxyProperties.setUserName("proxyUsername");
proxyProperties.setPassWord("proxyPassword");

Options.setProperty(org.apache.axis2.transport.http.HTTPConstants.PROXY,proxyProperties);

【问题讨论】:

    标签: web-services authentication soap proxy axis2


    【解决方案1】:
    1. 碰巧警告与异常无关。抛出异常是因为 web 服务不支持分块消息。只需添加它即可解决问题:

    options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);

    1. 警告本身很奇怪,但有一种方法可以删除它,只需添加任何登录名和密码。目的地不需要任何东西,但警告消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      相关资源
      最近更新 更多