对于 WebSphere Application Server 8.5.5 JAX-WS,在依赖客户端请求上下文中的地址之前,请检查两个外围控制项。IBM 的 JVM 级属性 com.ibm.ws.websvcs.transport.enableProxyTunnel 默认为 false;按客户端设置的地址并不会启用隧道。策略集的 HTTP 传输值也会覆盖编程值,而后者又覆盖 JVM 系统属性。

对于选定的现有端口,IBM 在调用之前记录了这种按客户端进行的设置:

import javax.xml.ws.BindingProvider;

BindingProvider binding = (BindingProvider) servicePort;
binding.getRequestContext().put("https.proxyHost", "proxy.example");
binding.getRequestContext().put("https.proxyPort", "8080");

HTTPS 键适用于 HTTPS 端点;对于 HTTP 请使用相应的 IBM HTTP 键。被允许的公共 SOAP 端点只有在适用策略和隧道控制允许、并且这些层级上没有配置代理账户时,才能使用HTTP 代理列表中的 HTTP 地址。代理认证有独立的 HTTP/HTTPS proxyUser 和 proxyPassword 属性,与 SOAP 服务凭据无关。

这些是 WebSphere 扩展。Metro、CXF 或其他实现中的 BindingProvider 映射并不能让这些字符串可移植。

请把不同的并发路由保留在配置正确的客户端对象上,而不要在调用进行时重写共享的端口上下文。这样地址只会限定在实际客户端上,而不会把其周围的所有 JVM 控制都当作客户端本地的。

相关文章