1、WebService简介
WebService是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。
根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。
尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息。无论定义还是实现,WEB服务过程会由服务器提供一个机器可读的描述(通常基于WSDL)以辨别服务器所提供的WEB服務。另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织,比如WS-I,就在WEB服务定义中强制包含SOAP和WSDL。
2、WebService相关注解
根据JSR 181规范,WebService 常用到的注解包括@WebService, @WebMethod, @WebParam, @WebResult, @HandlerChain等。
@WebService 用来标注PortType实现类或PortType接口。常用属性如下:
@WebMethod 用来标注服务提供的方法。
@WebParam 用来标注提供服务的具体方法的参数。
@WebResult 用来标注服务提供方法的返回值;
@HandlerChain 用来标注WebService服务器端使用到的handler。
此处只是简要的总结下,具体的详情请参看:
JAX-WS 注释 http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Frwbs_jaxwsannotations.html
3、WebService开发步骤
下面以JDK6.0自带的JWX-WS为例,讲述开发一个HelloWorld的示例;
A) 服务器端程序
i)生成WebService注释类。
package org.study.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public class HelloWorld { /** * 输入用户名称,返回对用户的问候。 * * @param name 用户名称 * @return 问候语句 */ public String sayHello(@WebParam(name="name")String name){ return "welcome "+name+", to web-service world!"; } }生成WebService实现类。
ii)发布WebService接口。
package org.study.service.publisher; import javax.xml.ws.Endpoint; import org.study.service.HelloWorld; public class ServicePublisher { /** * @param args */ public static void main(String[] args) { System.out.println("====正在启动Service服务器程序===="); Endpoint.publish("http://localhost/service/helloWorld", new HelloWorld()); System.out.println("====Service服务器启动完成====="); System.out.println("可以通过地址 [http://localhost/service/helloWorld?wsdl]访问服务相关描述信息!"); } }运行这个Publisher程序,发布WebService,可以访问 http://localhost/service/helloWorld?wsdl访问服务描述信息。
B)客户端程序
i) 根据WSDL描述信息生成WebService访问接口
新建Java工程helloWorldServiceClient, 在源文件夹src下,新建importWs.bat内容如下:
# 根据wsdl生成相关的service文件 wsimport -s . -d ../bin http://localhost/service/helloWorld?wsdl
注意: 运行importWs.bat之前,需已经运行Service服务端程序。 即http://localhost/service/helloWorld?wsdl可访问。
ii) 编写客户端代码:
package org.study.service.client; import org.study.service.HelloWorld; import org.study.service.HelloWorldService; public class HelloWorldClient { public static void main(String[] args){ HelloWorldService service = new HelloWorldService(); HelloWorld portType = service.getHelloWorldPort(); // invoke service method String welcomeStr = portType.sayHello("Walker Jong"); System.out.println(welcomeStr); } }
源代码:
helloWorldServiceServer.rar
helloWorldServiceClient.rar
参考文献:
1、 Web服务中文wiki http://zh.wikipedia.org/zh/Web%E6%9C%8D%E5%8A%A1
2、JAX-WS 注释 http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Frwbs_jaxwsannotations.html