Apache Axis2 用户指引- 创建客户端
当要创建一个Web service客户端的时候,你可以手动地创建(查看创建服务端(Building Services)),但是最重要的是你有一个Web Service描述语言(WSDL),它定义描述了客户端应该发送什么样的数据以及期望反馈的数据。Axis2提供了几种方式来通过WSDL来自动地生成客户端。
选择一个客户端生成方法
当生成客户端的时候,需要把WSDL映射成对象,Axis2提供给你几个选项。其中三个个是Axis2数据绑定框架(Axis2 DataBinding Framework)、XMLBeans和JiBx数据绑定(JiBX databinding)。这些方法的执行都是通过服务器使用数据绑定来创建java对象到XML结构里,每一个方法都有正面和反面,你可以可同不依据数据绑定来生成XMLin-out stubs。
Axis2 数据绑定框架(ADB):ADB或许是一个用来生成Axis2客户端最简单的方法。最多的情况,所有有关的类被创建为主stub类的内部类。ADB非常容易使用,但是它也有一些限制。它不意味着是一个完整的绑定应用程序的计划,而且在结构上也有些困难,譬如XML Schema元素伸展和限制。
XMLBeans: 不像ADB, XMLBeans 是一个完整的多功能的计划编辑者,所以它没有像ADB的那些限制。但是,在使用上它比ADB使用更复杂一些。它生成大量的文件以及程序编排模型,当然是可以使用的,只是不如ADB那样直接。
JiBX: JiBX 是一个完整的数据绑定框架,实际上它不仅仅提供了WSDL到JAVA的转换,还提供了JAVA到XML的转换。在某些方式上,JiBX 提供了这两中转换的最好方式。 JiBX 相当的灵活, 它可是使你能够选择类(classes)来代替你的实体(entites),但是它可以被完全地搭建。在另一方面,一旦它搭建起来了 ,实际上使用他来生成代码就如使用ADB一样方便。
最后,一个简单的结构,ADB或许对你来说已经足够使用了。如果,在另一方面你需要更多的灵活的能力,选择XMLBeans或者JiBX依据于你需要多大的灵活性和你对复杂化的容忍性。
生成客户端
生成和使用客户端的方式,依据于你的选择不同,有一些轻微的差异。这边文档提到的这三种方法中,客户端都是通过同样的WDL文件生成的(看 Code Listing 5).
注意到文档定义了四个操作:DoInOnly、NoParameters,、TwoWayOneParameterEcho、and MultipleParametersAddItem。每一个客户单都包含调用他们操作的方法。
(你可以获取更多关于WSL的信息,从这里http://www.w3.org/2002/ws/desc/.)
Axis Data Binding (ADB)
使用ADB来创建客户端,执行以下的步骤:
简单描述:
- 下载(Download)然后解压Apache Axis2 标准发行版,如果你还没有下载的话。
- 通过以下命令创建客户端:
:%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d adb -s
- 创建客户端(例如:Client.java),一个使用生产stub的java应用程序,保存在org/apache/axis2/axis2userguide目录。
- 键入ant jar.client来构建客户端。
- 假设你有一个可以通信的服务端,通过添加生成的Axis2UserGuideService-test-client.jar文件(在这个路径下:build/lib)来运行导入到环境变量里,然后键入: java org.apache.axis2.axis2userguide.Client
详细说明:
如果你还没有下载,下载(download) 然后解压Apache Axis2 标准发行版(Apache Axis2 Standard Distribution)。Axis2 WAR Distribution 并不包含生成代码的必须的功能,比如 WSDL2Java.
在生成客户端的ADB方法中,所有服务端的方法都放在一个叫做stub的类里。stub包含符合WSDL文件定义的相关信息的内部类,例如,拿这个WSDL来说--DoInOnlyRequestMessage。一旦你有了stub,你将能够通过简单的映射它们的类和方法来创建客户端。创建客户端,需要继续执行以下的命令,在代码清单6里:
代码清单6-生成客户端
%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d adb -s
这个命令分析了WSDL文件并且创建了stub在这个包下--org.apache.axis2.axis2userguide。这些选项详细说明了有关你想要ADB数据绑定方法(-d),和同步或者阻塞, 方法 (-s)。换句话说,当客户端发送了一个In-Out请求到服务器时,它将等待一个服务器的反馈才继续执行下去。
一旦你执行了这条指令,你将会看到在目录下多了两个选项。第一个项目是build.xml文件,它包含了Ant用来编译生成类的构造信息。第二个项目是src目录,它包含了实际的Axis2UserGuideServiceStub.java文件。如果你打开这个文件,你会看到很多的关于WSDL文件的每一个选项的内部类集合。你也可以发现许多调用Axis2客户端的API,包括使用AXIOM来创建和分析接收和发送的消息。
现在,你需要用这些代码来组成一个客户端。为了创建给一个客户端,需要创建一个新的类命名为Client.java,放在这个目录下。它包含了如代码清单7(Code Listing 7)的代码。
注意下,使用service来创建和构建在WSDL文件定义好的请求名字的相似类型很简单。接下来使用stub来发送请求到近似的方法。例如,发起DoInOnly操作,你需要创建一个 DoInOnlyRequest,使用它的setMessageString()方法来发送它的messageString标签的内容,然后作为一个变量传送到stub.DoInOnly()方法。
要创建客户端,键入:ant jar.client
这个动作常见两个新的目录,build和test。test目录是空的,但是build目录包含两个client的版本。第一个版本,在lib目录下,是包含client类和stub的.jar文件。第二个版本,在classes目录下,是未经处理过的classes。
确保在Axis2 lib目录下的所有jar文件都被设置到环境变量里。
如果你有一个service通信到这个client,你可以通过添加jar文件到你的classpath,然后输入以下命令来运行client:
java org.apache.axis2.axis2userguide.Client
(如果你没有这样的一个service,参考Building services文档)
你应该可以在你的servlet容器控制台窗口看到反馈信息。看起来应该是这个样子的:
ADB 不是生产Web service clients的唯一选择。其他的选择包括XmlBeans,JiBX and JAXBRI.