25.3. 将端口添加到服务
概述
服务的端点信息在 wsdl:port
元素中定义,Service
对象会为 WSDL 合同中定义的每个端点创建一个代理实例。如果您在创建 Service 对象时不指定 WSDL 合同,
对象没有获取有关实施您的服务的端点的信息,因此无法创建任何代理实例。在这种情况下,您必须为 Service
Service
对象提供使用 addPort()
方法代表 wsdl:port
元素所需的信息。
addPort()方法
Service
类定义了一个 addPort()
方法(在 例 25.3 “addPort()
方法” 中显示),在消费者实施中没有可用于 WSDL 合同的情况下使用。addPort()
方法允许您为 Service
对象提供信息,后者通常存储在 wsdl:port
元素中,以便为服务实施创建代理。
例 25.3. addPort()
方法
addPort
QName
portName
String
bindingId
String
endpointAddress
WebServiceException
portName
的值是一个 QName。其 namespace 部分的值是该服务的目标命名空间。该服务的目标命名空间在 @WebService
注释的 targetNamespace
属性中指定。QName 的本地部分的值是 wsdl:port
元素的 name
属性的值。您可以使用以下方法之一确定这个值:
-
在
@WebService
注释的portName
属性中指定它。 -
将
Port
附加到@WebService
注释的name
属性的值。 -
将
Port
附加到 SEI 的名称。
bindingId
参数的值是一个字符串,它唯一标识端点使用的绑定类型。对于使用标准 SOAP 命名空间的 SOAP 绑定: http://schemas.xmlsoap.org/soap/
。如果端点没有使用 SOAP 绑定,则 bindingId
参数的值由绑定开发人员决定。 endpointAddress
参数的值是发布端点的地址。对于 SOAP/HTTP 端点,地址是一个 HTTP 地址。HTTP 以外的传输使用不同的地址方案。
示例
例 25.4 “将端口添加到 服务对象
” 显示在 例 25.2 “创建服务
对象” 中创建的服务 对象中
添加端口的代码。
例 25.4. 将端口添加到 服务对象
package com.fusesource.demo; import javax.xml.namespace.QName; import javax.xml.ws.Service; public class Client { public static void main(String args[]) { ... QName portName = new QName("http://demo.redhat.com", "stockQuoteReporterPort"); s.addPort(portName, "http://schemas.xmlsoap.org/soap/", "http://localhost:9000/StockQuote"); ... } }
例 25.4 “将端口添加到 服务对象
” 中的代码执行以下操作:
为 portName
参数创建 QName。
调用 addPort()
方法。
指定端点使用 SOAP 绑定。
指定发布端点的地址。