选自javaee技术体系中的webservice技术
JDK提供webservice的方式,主要是使用注解。
先写一个很简单的例子:
webservice服务端
package com.lgy.webservice.inter;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface IWebServiceTest {
@WebMethod
public void test();
}
package com.lgy.webservice.impl;
import javax.jws.WebService;
import com.lgy.webservice.inter.IWebServiceTest;
@WebService
public class WebServiceTestImpl implements IWebServiceTest {
@Override
public void test() {
System.out.println("aaaaaaaaaaaa");
System.out.println("aaaaaaaaaaaa");
System.out.println("aaaaaaaaaaaa");
}
}
package com.lgy.webservice;
import javax.xml.ws.Endpoint;
import com.lgy.webservice.impl.WebServiceTestImpl;
public class InitApp {
public static void main(String[] args) {
//访问方式:http://localhost:7777/tudou?wsdl
String address="http://127.0.0.1:7777/test";
Endpoint.publish(address, new WebServiceTestImpl());
System.out.println("web service 服务发布");
}
}
执行InitApp中的main方法后,在浏览器属兔address:http://127.0.0.1:7777/test?wsdl,内容如下:
该 XML 文件并未包含任何关联的样式信息。文档树显示如下。
表名你的webservice服务发布成功了。wsdl中的信息包含了你webservice中的信息,wsdl的属性也特别的重要。知道wsdl的意义,你才能知道怎么去查询使用jdk自带的webservice注解。(下一篇介绍)。
ps:如果是web项目,我们的思路是在项目启动的时候发布webservice,当然也有场景需要手动的发布/停止webservice服务,或者在某个时间段类进行webservice的发布。2这里笔者介绍2中方案,一个是javaee的监听器,一个是javaee的servlet。实践就不再这里讲述了。
常见的webservice注解目录如下:
javax.jws.WebService
描述
目标:类
指定实现 Web Service 的 JWS 文件。
特性
表 B-1 javax.jws.WebService JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? | ||
name | Web Service 的名称。映射到 WSDL 文件中的 <wsdl:portType> 元素。 默认值为 JWS 文件中 Java 类的非限定名称。 | String | 否 | ||
targetNamespace | 用于从此 Web Service 生成的 WSDL 和 XML 元素的 XML 名称空间。 默认值由 JAX-RPC specification 指定。 | String | 否 | ||
serviceName | Web Service 的服务名。映射到 WSDL 文件中的 <wsdl:service> 元素。 默认值为 JWS 文件中 Java 类的非限定名称,后面加上字符串 Service。 | String | 否 | ||
wsdlLocation | 预定义 WSDL 文件的相对或绝对 URL。如果指定此特性,则当 JWS 文件与 WSDL 文件中的端口类型和绑定不一致时,jwsc Ant 任务不生成 WSDL 文件,并且会返回错误。
| String | 否 | ||
endpointInterface | 现有服务端点接口文件的完全限定名称。如果指定此特性,则假设您已经创建了该端点接口文件,并且该文件位于 CLASSPATH 中。 | String | 否 |
javax.jws.WebMethod
描述
目标:方法
指定方法公开为该 Web Service 的公共操作。必须明确使用此批注来公开方法;如果不指定此批注,该方法则默认为不公开。
特性
表 B-2 javax.jws.WebMethod JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? |
operationName | 操作的名称。映射到 WSDL 文件中的 <wsdl:operation> 元素。 默认值为该方法的名称。 | String | 否 |
action | 此操作的操作。对于 SOAP 绑定,此特性的值决定 SOAP 消息中 SOAPAction 头的值。 | String | 否 |
javax.jws.WebParam
描述
目标:参数
自定义 Web Service 的操作输入参数和生成的 WSDL 文件的元素之间的映射。还用于指定参数的行为。
特性
名称
描述 | 数据类型 | 是否必需? | |
name | WSDL 文件中参数的名称。 对于 RPC 样式的 Web Service,该名称映射到表示该参数的 <wsdl:part> 元素。对于文档样式的 Web Service,该名称为表示该参数的 XML 元素的本地名称。 默认值为该方法的参数的名称。 | String | 否 |
targetNamespace | 该参数的 XML 名称空间。此值仅用于文档样式的 Web Service,其中该参数映射到 XML 元素。 默认值为该 Web Service 的 targetNamespace。 | String | 否 |
mode | 该参数的流方向。 有效值为:
默认值为 WebParam.Mode.IN。 如果指定 WebParam.Mode.OUT 或 WebParam.Mode.INOUT,则该参数的数据类型必须为 Holder 或扩展 Holder。有关详细信息,请参阅 JAX-RPC specification。 WebParam.Mode.OUT 和 WebParam.Mode.INOUT 模式仅对于 RPC 样式的 Web Service 或映射到头的参数受支持。 | enum | 否 |
header | 指定该参数的值是否存在于 SOAP 头中。默认情况下,参数位于 SOAP 正文中。 有效值为 true 和 false。默认值为 false。 | boolean | 否 |
javax.jws.WebResult
描述
目标:方法
自定义 Web Service 操作返回值和生成的 WSDL 文件的对应元素之间的映射。
特性
表 B-4 javax.jws.WebResult JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? |
name | WSDL 文件中参数的名称。 对于 RPC 样式的 Web Service,该名称映射到表示返回值的 <wsdl:part> 元素。对于文档样式的 Web Service,该名称为表示返回值的 XML 元素的本地名称。 默认值为硬编码名称 result。 | String | 否 |
targetNamespace | 返回值的 XML 名称空间。此值仅用于文档样式的 Web Service,其中返回值映射到 XML 元素。 默认值为该 Web Service 的 targetNamespace。 | String | 否 |
javax.jws.HandlerChain
描述
目标:类
将 Web Service 与包含处理程序链的配置的外部文件相关联。配置包括链中处理程序的列表、它们的执行顺序、初始化参数等。
如果为下列情况,则请在 JWS 文件中使用 @HandlerChain 批注,而不要使用 @SOAPMessageHandlers 批注:
- 希望多个 Web Service 共享同一个配置。
- 处理程序链包括用于多个传输的处理程序。
- 希望能够更改 Web Service 的处理程序链配置,且不重新编译实现它的 JWS 文件。
将此批注与 @SOAPMessageHandlers 批注进行组合是错误的。
有关外部配置文件的 XML Schema、有关创建该文件的其他信息,以及其他示例,请参阅 Web Services Metadata for the Java Platform specification。
特性
表 B-5 javax.jws.HandlerChain JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? |
file | 处理程序链配置文件的相对或绝对 URL。相对 URL 为相对于 JWS 文件位置的 URL。 | String | 是 |
name | 希望与该 Web Service 相关联的处理程序链的名称(位于由 file 特性指向的配置文件中)。 | String | 是 |
javax.jws.soap.SOAPBinding
描述
目标:类
指定 Web Service 到 SOAP 消息协议的映射。
特性
表 B-6 javax.jws.soap.SOAPBinding JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? | ||
style | 指定请求和响应 SOAP 消息的消息样式。 有效值为:
默认值为 SOAPBinding.Style.DOCUMENT。 | enum | 否 | ||
use | 指定请求和响应 SOAP 消息的格式设置样式。 有效值为:
默认值为 SOAPBinding.Use.LITERAL。 | enum | 否 | ||
parameterStyle | 确定方法参数是否表示整个消息正文,或者这些参数是否为包装在根据该操作命名的顶级元素中的元素。 有效值为:
默认值为 SOAPBinding.ParameterStyle.WRAPPED
| enum | 否 |
javax.jws.soap.SOAPMessageHandler
描述
目标:无;此批注只能在 @SOAPMessageHandler 数组内使用。
指定 @SOAPMessageHandler 数组中的某个特定 SOAP 消息处理程序。该批注包括指定该处理程序的类名、初始化参数、该处理程序处理的 SOAP 头的列表等的特性。
特性
表 B-7 javax.jws.soap.SOAPMessageHandler JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? |
name | SOAP 消息处理程序的名称。 默认值为实现 Handler 接口(或扩展 GenericHandler 抽象类)的类的名称。 | String | 否 |
className | 处理程序类的名称。 | String | 是 |
initParams | 在初始化期间传递到该处理程序类的名称/值对数组。 | @InitParam 数组 | 否 |
roles | 该处理程序实现的 SOAP 角色的列表。 | String 数组 | 否 |
headers | 该处理程序处理的 SOAP 头的列表。 此数组中的每个元素都包含一个定义该处理程序所处理的头元素的 Qname。 | String 数组 | 否 |
javax.jws.soap.InitParam
描述
目标:无;此批注只能用作 @SOAPMessageHandler 批注的 initParams 特性的值。
在 @SOAPMessageHandler 批注的 initParams 特性中使用此批注可指定在初始化期间传递到处理程序类的参数(名称/值对)数组。
特性
表 B-8 javax.jws.soap.InitParam JWS 批注的特性
名称 | 描述 | 数据类型 | 是否必需? |
name | 初始化参数的名称。 | String | 是 |
value | 初始化参数的值。 | String | 是 |