配置 Web Service 客户机以使用 Web 代理来访问资源
可以将 Web Service 客户机配置为通过 Web 代理服务器来访问资源。
关于此任务
正如同其他 HTTP 客户机应用程序一样,而不论是否需要认证,可以将 Web Service 客户机配置为通过连接至 Web 代理服务器来访问资源。可以配置 Web Service 的 HTTP 传输属性,该 Web Service 充当另一 Web Service 的客户机。您配置的 HTTP 传输值在运行时使用。通过下列其中一种方式来配置 HTTP 传输值:
- 在管理控制台中使用 Java™ 虚拟机 (JVM) 定制属性面板来配置属性。
- 使用 wsadmin 命令行工具来配置这些属性。
- 使用组装工具来配置这些属性。
- 以编程方式使用应用程序编程模型来配置这些属性。
如果要使用 Java API XML-based Remote Procedure Call (JAX-RPC) 编程模型或 Java API for XML Web Services (JAX-WS) 编程模型以编程方式来配置这些属性,请查看 JAX-RPC 或 JAX-WS 规范。
有关受支持的标准和规范的完整列表,请参阅 Web Service 规范和 API 文档。
对于 Java API for XML-based Remote Procedure Call (JAX-RPC) Web Service,HTTP 传输值采用以下优先顺序,其中程序化方法最重要:
- 以编程方式对 Call 对象指定的值
- 使用组装工具在每个 portQNameBinding 属性的部署描述符中定义的值
- 定义为 JVM 系统属性的值
对于 Java API for XML Web Service (JAX-WS) Web Service,您在策略集定义中指定的 HTTP 传输值优先于以编程方式定义的值。 随后,以编程方式定义的 HTTP 传输值优先于定义为 JVM 系统属性的值。对于 JAX-WS 应用程序,部署描述符不受支持。使用注释来指定部署信息。
过程
结果
您已经将 Web Service 客户机配置为使用 Web 代理服务器来访问资源。
可根据需要设置 http.nonProxyHosts 属性,以指定不通过代理服务器向其发送请求的机器主机名。任何由客户机应用程序调用并发送至名称包含在此属性中的主机的请求都不通过代理服务器进行传递。此属性适用于 HTTP 和 HTTPS 连接。要了解有关 http.nonProxyHosts 属性以及其他您可以配置的 HTTP 属性的更多信息,请参阅 Web Service 应用程序的 HTTP 传输定制属性。
示例
以下代码允许您以编程方式配置 HTTP 代理:
import com.ibm.wsspi.webservices.Constants
Properties prop = new Properties();
InitialContext ctx = new InitialContext(prop);
Service service = (Service)ctx.lookup("java:comp/env/service/StockQuoteService");
QName portQname = new QName("http://httpchannel.test.wsfvt.ws.ibm.com", "StockQuoteHttp");
StockQuote sq = (StockQuote)service.getPort(portQname, StockQuote.class);
((javax.xml.rpc.Stub) sq)._setProperty(Constants.HTTP_PROXYHOST_PROPERTY, "proxyHost1.ibm.com");
((javax.xml.rpc.Stub) sq)._setProperty(Constants.HTTP_PROXYPORT_PROPERTY, "80");
注: 对于 JAX-WS,以下代码使您可以使用 BindingProvider 的 RequestContext 以编程方式指定 HTTP 或 HTTPS 属性:
//Set the https.proxyHost as a property on the RequestContext.
BindingProvider bp = (Binding Provider)port;
bp.getRequestContext().put("https.proxyHost", "proxyHost1.ibm.com");
bp.getRequestContext().put("https.proxyPort", "80");