24.3.2. 必需的注解

概述

要从 Java 代码创建服务,您只需要向代码添加一个注解。您必须在 SEI 和实施类中添加 @WebService 注释。

@WebService 注解

@WebService 注释由 javax.jws.WebService 接口定义,它被放在接口或要用作服务的类中。@webService 具有中描述的属性 表 24.1 “@webService 属性”

表 24.1. @webService 属性

属性描述

name

指定服务接口的名称。此属性映射到 wsdl:portType 元素的 name 属性,该元素在 WSDL 合同中定义服务的接口。默认为在实施类的名称中添加 PortType[a]

targetNamespace

指定定义该服务的目标命名空间。如果没有指定此属性,则目标命名空间派生自软件包名称。

serviceName

指定已发布的服务的名称。此属性映射到定义所发布服务的 wsdl:service 元素的 name 属性。默认值是使用服务的实施类的名称。

wsdlLocation

指定存储服务的 WSDL 合同的 URL。这必须使用一个相对 URL 指定。默认为部署该服务的 URL。

endpointInterface

指定实施类实施的 SEI 的完整名称。仅在服务实施类中使用 属性时指定此属性。

portName

指定发布该服务的端点的名称。此属性映射到 wsdl:port 元素的 name 属性,用于指定公布的服务的端点详情。默认为在服务的实现类中添加 Port

[a] 从 SEI 生成 WSDL 时,会使用接口名称来代替实施类名称。
注意

不需要为任何 @WebService 注释的属性提供值。但是,建议您提供尽可能多的信息。

为 SEI 标注

SEI 要求您添加 @WebService 注释。由于 SEI 是定义服务的合同,所以您应该在 @WebService 注释的属性中指定服务尽可能多的详细信息。

例 24.3 “带有 @WebService 注解的接口” 显示 例 24.1 “simple SEI” 中带有 @WebService 注释的接口。

例 24.3. 带有 @WebService 注解的接口

package com.fusesource.demo;

import javax.jws.*;

@WebService(name="quoteUpdater",
            targetNamespace="http://demos.redhat.com",
	        serviceName="updateQuoteService",
            wsdlLocation="http://demos.redhat.com/quoteExampleService?wsdl",
            portName="updateQuotePort")
public interface quoteReporter
{
  public Quote getQuote(String ticker);
}

例 24.3 “带有 @WebService 注解的接口” 中的 @WebService 注释执行以下操作:

指定定义服务接口的 wsdl:portType 元素的 name 属性的值是 quoteUpdater

指定服务的目标命名空间是 http://demos.redhat.com

指定定义所发布服务的 wsdl:service 元素的值为 updateQuoteService

指定该服务将在 http://demos.redhat.com/quoteExampleService?wsdl 发布其 WSDL 合同。

指定定义公开该服务的 端点的 name 属性的值是 updateQuotePort

为服务实施添加注解

除了使用 @WebService 注释标注 SEI 外,还必须为服务实施类添加 @WebService 注释。当在服务实施类中添加注解时,您只需要指定 endpointInterface 属性。如 例 24.4 “注解的服务实现类” 所示,属性必须设置为 SEI 的全名。

例 24.4. 注解的服务实现类

package org.eric.demo;

import javax.jws.*;

@WebService(endpointInterface="com.fusesource.demo.quoteReporter")
public class stockQuoteReporter implements quoteReporter
{
public Quote getQuote(String ticker)
  {
  ...
  }
}