java - 对选定的 jaxws 请求使用 httpsproxy,而不是在系统中设置它

标签 java web-services jax-ws http-proxy

我正在使用 JAXWS 客户端。我需要对某些选定的请求使用 httpproxy,因此我不想将其设置为环境(它将应用于所有请求)。我无法找到有关如何为每个请求设置 httproxy 的详细信息。

我能找到的最好的就是这篇文章:

How can I use an HTTP proxy for a JAX-WS request without setting a system-wide property?

但它并不是很详细,也没有提供什么线索。有人可以帮忙吗?

最佳答案

我发现自定义 SSLSocketFactory 从未被调用过(jaxws-rt-2.2.10-b140803.1500)。反射是为每个服务设置代理而不使用系统范围属性的唯一解决方案。

void initClient(BindingProvider bindings, String endpoint) {
  Map<String, Object> context = bindings.getRequestContext();
  context.put(BindingProviderProperties.CONNECT_TIMEOUT, CONNECT_TIMEOUT);
  context.put(BindingProviderProperties.REQUEST_TIMEOUT, REQUEST_TIMEOUT);

  Map<String, List<String>> userHeaders = new LinkedHashMap<String, List<String>>();
  context.put("javax.xml.ws.http.request.headers", userHeaders);

  userHeaders.put("User-Agent", Collections.singletonList("{YOUR-USER-AGENT}"));
  userHeaders.put("Proxy-Athorization",
                  Collections.singletonList("Basic " + "{PROXY-AUTH}"));

  if (bindings instanceof WSBindingProvider) {
    WSBindingProvider wsbinding = (WSBindingProvider) bindings;
    WSPortInfo wsport = wsbinding.getPortInfo();
    EndpointAddress addr = wsport.getEndpointAddress();

    try {
      Field proxy = EndpointAddress.class.getDeclaredField("proxy");
      proxy.setAccessible(true);
      proxy.set(addr, PROXY);

      Field url = EndpointAddress.class.getDeclaredField("url");
      url.setAccessible(true);
      url.set(addr, new URL(new URI(endpoint).toASCIIString()));

    } catch (Exception e) {
      log.warning("Edit EndpointAddress error: " + e);
    }
  }
}

玩得开心!

关于java - 对选定的 jaxws 请求使用 httpsproxy,而不是在系统中设置它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841108/

相关文章:

java - 如何重现 java.net.SocketException : Broken pipe

java - PostgreSQL 提示 : You will need to rewrite or cast the expression. 列 "state"是状态类型,但表达式是字符类型变化

c# - 使用 Json.NET 从 WebService 反序列化大型 json

java - 如何处理 setter 在 JAXB 自动从请求正文解码时抛出的异常?

java - 如何将 SAML token 直接放入 JAX-WS 服务而不调用 STSClient

java - Java Web 服务客户端中的连接详细信息和超时

java - 如何在 Spring XML 中使用 Camel 消息过滤器 Bean

java - 无法将 ViaPost 发送到 Axis2 1.6 中的 url

java - JAX-WS 与 SAAJ 样式,使用哪个

java - 泛型 hell : hamcrest matcher as a method parameter