微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WebService学习笔记一

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接口。常用属性如下:

  • name: 标注的PortType类型;
  • serviceName: 生成的Service名称
  • portName: 调用port的名称
  • endpointInterface: 使用portType接口定义时使用。


@WebMethod 用来标注服务提供的方法

  • operationName: 定义WSDL里描述的方法名称
  • action: 定义action的名称
  • exclude: 定义该方法是否加入到web service对外提供的接口中。


@WebParam 用来标注提供服务的具体方法的参数。

  • name: 生成WSDL时用来描述方法参数的名称
  • mode: 参数的类型,有IN、OUT、INOUT;
  • header:定义参数是否位于header中传输;


@WebResult 用来标注服务提供方法的返回值;

  • name: 生成WSDL时描述方法的返回名称
  • header: 返回的值是否放在SOAP Header中传输。



@HandlerChain 用来标注WebService服务器端使用到的handler。

  • file: 定义handler链的文件
  • name: 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

然后运行: 生成相关的service java文件和class文件

注意: 运行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);
	}
}

执行客户端代码,即可访问service;


代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐