Webservices开发文档

Webservices开发文档

1. 主要内容包括

1、关于webservice的基本概念

2Axis相关概念和命令。

3、开发和测试工具,代码实例。

4、开发客户端和服务器端的开发流程。

5、开发的详细的命令介绍。

6、如何测试的方法。

7、发布的步骤。

8、日志跟踪机制。

9、其他优秀文章。

10             相关参考资料的介绍。

11             其他文档的发布路线图。

2. Web Service基本概念

2.1   什么是 Webservice

WebServices 是使应用程序可以以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换的数据。一组以这种方式交互的 Web 服务在面向服务的体系结构(Service-Oriented ArchitectureSOA)中定义了特殊的 Web 服务应用程序。

2.2    基本组成

webservices由两部分组成:

·SOAP--Web Service之间的基本通信协议。

·WSDL--Web Service描述语言,它定义了Web Service做什么,怎么做和查询的信息。

2.3    什么是SOAP

SOAPSimple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的轻量级协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一种语言相互通信。

SOAP包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

应用中比较关注的是envelop,由一个或多个Header和一个Body组成。

SOAP在可互操作的基础 Web 服务协议栈中的位置。

2.4    什么是WSDL

WSDLWeb Service Description LanguageWeb服务器描述语言是用XML文档来描述Web服务的标准,是Web服务的接口定义语言,由AribaIntelIBMMS等共同提出,通过WSDL,可描述Web服务的三个基本属性:

·服务做些什么——服务所提供的操作(方法)

·如何访问服务——和服务交互的数据格式以及必要协议

·服务位于何处——协议相关的地址,如URL

WSDL文档以端口集合的形式来描述Web服务,WSDL 服务描述包含对一组操作和消息的一个抽象定义,绑定到这些操作和消息的一个具体协议,和这个绑定的一个网络端点规范。

WSDLWeb 服务概念性协议栈中的位置。

WSDL描述语言一般包含三部分

       What部分:包括了typemessageportType元素

Type:定义了Web Service使用的数据结构(使用XML Schema定义)

Message:一个MessageSOAP的基本通信元素。每个Message可以有一个或多个Part,每个Part代表一个参数。

PortType:消息汇总为不同的操作并归入到一个被称为portType的实体中。一个portType代表一个接口(Web Service支持的操作集合),每个Web Service可以有多个接口,它们都使用portType表示。每个操作又包含了input output部分。

       How部分:包含binding元素
binding
元素将portType绑定到特定的通信协议上(如HTTP上的SOAP协议)

      Where部分:由service元素组成

它将portType,binding以及Web Service实际的位置(URI)放在一起描述

2.5    什么是WSDD

WSDD就是WEB服务分布描述(Web Service Deployment Descriptor, 它定义了WEB服务的接口,如服务名、提供的方法、方法的参数等信息。

2.6    什么是UDDI

UDDI就是统一描述、发现和集成(Universal Description, Discovery, and Integration)。UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。

Web 服务中的角色、操作和构件。

服务提供者。从企业的角度看,这是服务的所有者。从体系结构的角度看,这是托管访问服务的平台。

服务请求者。从企业的角度看,这是要求满足特定功能的企业。从体系结构的角度看,这是寻找并调用服务,或启动与服务的交互的应用程序。服务请求者角色可以由浏览器来担当,由人或无用户界面的程序(例如,另外一个 Web 服务)来控制它。

服务注册中心。

这是可搜索的服务描述注册中心,服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行期间,服务请求者查找服务并获得服务的绑定信息(在服务描述中)。对于静态绑定的服务请求者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发送给服务请求者。同样,服务请求者可以从服务注册中心以外的其它来源得到服务描述,例如本地文件、FTP 站点、Web 站点、广告和服务发现(Advertisement and Discovery of ServicesADS)或发现 Web 服务(Discovery of Web ServicesDISCO)。

2.7    客户端和服务器端

2.7.1    客户端

根据wsdl文件生成的一组相关的客户端类。然后,通过wsdl地址可以访问其他系统或应用所提供的功能。

通常Web Service可以有三种类型的客户

       商业伙伴(Business Partner--包括分发商,零售商以及大型消费者)

此类客户通过SOAPWSDLebXMLUDDIXML技术与Web Service连接

         瘦客户--包括Web浏览器、PDA以及无线设备

该类客户通常经由轻量协议(HTTP)Web Service连接

        肥客户--包括Applet、各类应用以及现存系统
通常使用重量级协议(如IIOP)连接Web Service

2.7.2     服务器端

也就是对外提供的一个接口(本质上就是:方法),让其他不同的系统或应用可以来进行访问,本系统的功能。它包括的内容:

1.一个对外接口

2.该接口的实现类

3.一个部署描述文件,描述这个服务(接口)。部署文件中的服务的信息,是可以通过axis的命令来生成的。

这些文件都是将包含在一个完整的web应用中的,当启动web容器的时候,就可以其他系统进行访问了。

3       .Axis概念、命令和方法

3.1     AXIS详细介绍

Apache Axis Apache WebService项目中的子项目,其最初起源于IBM"SOAP4J",应该属于最早的一批用于构造基于SOAP应用的Framework 目前Apache Axis已经发展到了第三代,其核心是一个SOAP处理器,用于开发包括客户端,服务器端,SOAP Gateway等各种应用。事实上Apache Axis在了1.0版后,其发行版本还包括了完整的J2EE服务器插件, WSDL支持和生成,TCP/IP监视器等组件,从这个意义上来说Apahce Axis已不仅仅是个SOAP框架了,它包含了除了UDDI外对整个Web Service协议栈(Protocol Stack)的支持。

3.2   Axis工具简单操作命令和基本概念

1显示帮助信息:java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java

生成客户端代码实例:前提是必须的在dos切换到axislib目录。然后执行这个命令。 java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -a -H -d -s -t -S true -p com.xino.adc.webServices http://192.168.6.15/ADCWeb/HzGsyj.asmx?wsdl

2WSDL2Java工具用于从WSDL文件生成客户端存根(stub)代码,服务端框架(skeleton)代码以及WSDL中的数据类型文件(生成与之对应的Java代码)

Wsdl2java命令参数参考:

-h, --help

 打印帮助信息后退出

-v, --verbose

 打印报告信息

-n, --noImports

 只生成直接的WSDL代码文档

-O, --timeout

 超时秒数(默认45, -1表示不限定)

-D, --Debug

 打印调试信息

-W, --noWrapped

 关闭装订(wrapped)文档/文字支持

-s, --server-side

 web service发布服务端绑定

-S, --skeletonDeploy

 deploy.wsdd中展开纲要(true)或执行(false)
 
默认为false。假定server-side.

-N, --NStoPkg =

 命名空间到包的映射

-f, --fileNStoPkg

 命名空间到包的映射文件(默认为NStoPkg.properties)
-p, --package

 用包名称覆盖所有的命名空间到包的映射

-o, --output

 发行文件的输出目录

-d, --deployScope

 增加范围到deploy.xml: Application(应用), Request(请求), Session(会话)

-t, --testCase

 web service发行junit测试用例类

-a, --all

 为所有元素生成代码,包括未引用的元素

-T, --typeMappingVersion

 指示1.11.2. 默认为1.1(SOAP 1.1适用JAX-RPC. 1.2标志SOAP 1.1编码.)

-F, --factory

 执行GeneratorFactory接口的用户类名称(扩展Java generation函数)

-i, --nsInclude

 包含在生成代码中的特定命名范围(默认为所有命名空间,除非用-x选项)

-x, --nsExclude

 从生成代码中排除的特定命名空间(默认为none,排除直到第一个用-i选项包含的命名空间)

-p, --property =

 用户GeneratorFactory的属性名称和值

-H, --helperGen

 meta数据发行分离Helper

-U, --user

 访问WSDL-URI的用户名

-P, --password

 访问WSDL-URI的密码

-c, --implementationClassName 用该项作为实现类

3server-config.wsdd记录了axis已发布的Web服务的描述信息。

3.3    文件格式介绍

 JWS (Java Web Service) Files - Instant Deployment 它是格式正确的java文件,文件的后缀是.jws。如果发布,可以直接把它放到发布的工程根目录下。它不能指定包名。如果引用其他类,只能其他类也不能指定包名。

4. 使用Axis开发Web Service程序

4.1、新建一个Web工程,工程名为“AxisTest”
4..2
、新建“lib”文件夹,然后把主要JAR包:axis.jarcommons-discovery-0.2.jarcommons-logging-1.0.4.jarjaxrpc.jarwsdl4j-1.5.1.jarsaaj.jar;可选包(发布服务及生成客户端程序是要用到的):activation.jarmail.jar都拷贝到此“lib”文件夹下,并把主要的JAR包添加到工程的classpath中;
 4.3
、配置“web.xml”

      

    xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

   

    Apache-Axis   

   

        org.apache.axis.transport.http.AxisHTTPSessionListener

   

 

    AxisServlet

   

        org.apache.axis.transport.http.AxisServlet

   

 

 

    AdminServlet

   

        org.apache.axis.transport.http.AdminServlet

   

    100

 

 

    SOAPMonitorService

   

        org.apache.axis.monitor.SOAPMonitorService

   

   

      SOAPMonitorPort

      5001

   

    100

 

 

    AxisServlet

    /servlet/AxisServlet

 

 

    AxisServlet

    *.jws

 

 

    AxisServlet

    /services/*

 

 

    SOAPMonitorService

    /SOAPMonitor

 

 

 

   

        20

   

    

 

    wsdl

     text/xml

 

 

 

    xsd

    text/xml

 

 

    index.jsp

    index.html

    index.jws

 

4.4、编写服务端程序serverSayHello.java,编译server.SayHello.java
package server;
public class SayHello
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}
 4. 5
、编写wsdd文件
deploy.wsdd
文件内容如下:

"http://xml.apache.org/axis/wsdd/providers/java">
 
  
  
  
 

4.6、把工程发布到Tomcat并启动Tomcat
 4.7
、发布服务
编辑一个deploy.batAxis_Libaxis.jar路径。内容如下:
set Axis_Lib=./lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/AxisTest/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/AxisTest/servlet/AxisServlethttp://localhost:8080/AxisTest/services就会显示服务列表。

 4.8、生成客户端client stub文件
在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。
编写一个WSDL2Java.bat文件,其内容如下:
set Axis_Lib=./lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=./src
set Package=server.com
set wsdl_path=http://localhost:8080/AxisTest/services/ SayHello?wsdl
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% %wsdl_path%

执行这个批处理文件就可以生成client stub.
  生成的stub client文件列表为:SayHello.javaSayHelloService.javaSayHelloServiceLocator.javaSayHelloSoapBindingStub.java .
 4. 9
、编写客户端程序,编译并执行
1
)、Stubs方式
下面是一段junit测试客户端代码。
import java.net.URL;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestWSClient extends TestCase {
    public TestWSClient(String string) {
        super(string);
    }
    public void SayHelloClient() throws Exception {
        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello() ;
        String retValue = client.getName("clientname");
        System.out.println(retValue);
    }
    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestWSClient("SayHelloClient"));
        return suite;
    }
}
2
)、动态调用方式:
try {
           // Options options = new Options(args);
            
            String endpointURL = "http://localhost:8080/AxisTest/services/SayHello";
            
            Service  service = new Service();
            Call     call    = (Call) service.createCall();
            call.setTargetEndpointAddress( new java.net.URL(endpointURL) );
            call.setOperationName( new QName("SayHello", "getName") );
            String res = (String) call.invoke( new Object[] {"Jack"} );
            System.out.println( res );
        } catch (Exception e) {
            System.err.println(e.toString());
        }

 

 

你可能感兴趣的:(soap,webservice,service,web,servlet,java)