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() 方法

addPortQNameportNameStringbindingIdStringendpointAddressWebServiceException

portName 的值是一个 QName。其 namespace 部分的值是该服务的目标命名空间。该服务的目标命名空间在 @WebService 注释的 targetNamespace 属性中指定。QName 的本地部分的值是 wsdl:port 元素的 name 属性的值。您可以使用以下方法之一确定这个值:

  1. @WebService 注释的 portName 属性中指定它。
  2. Port 附加到 @WebService 注释的 name 属性的值。
  3. 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 绑定。

指定发布端点的地址。