对于一个工具来说,最重要的是读懂里面的sample,下面这篇文章就是对axis2的sample的解读,英文原文链接如下
Axis2 Quick Start Guide
http://axis.apache.org/axis2/java/core/docs/quickstartguide.html作者解读并非翻译,与原文有一定区别,作为补充
环境准备:
apache-ant-1.9.4
配置好ANT_HOME
apache-tomcat-7.0.55
axis2-1.5.6
配置好AXIS2_HOME
将axis2.war放到C:\apache-tomcat-7.0.55\webapps下面,启动tomcat,打开 http://localhost:8080/axis2/ ,出现下面画面
administration默认用户名密码是 admin/axis2
目录
*.aar代码结构
*.aar是axis2生成的打包文件,直接将生成的文件放入 C:\apache-tomcat-7.0.55\webapps\axis2\WEB-INF\services 中,在 http://localhost:8080/axis2/services/listServices 中就能看到相应的service,打开就能看到相应的 wsdl
以接下来的quickstart示例来说
生成的aar代码结构如下
- StockQuoteService
- META-INF
- services.xml
- lib
- samples
- quickstart
- service
- pojo
- StockQuoteService.class
注意里面的server.xml
The services.xml file defines the service itself and links the Java class to it
<service name="StockQuoteService" scope="application">
<description>
Stock Quote Sample Service
</description>
<messageReceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">
samples.quickstart.service.pojo.StockQuoteService
</parameter>
</service>
quickstart (POJO)
quickstart 示例演示了使用 POJO来创建一个web service
cd C:\axis2-1.5.6\samples\quickstart
ant compile.serviceant generate.wsdl
ant generate.service
剪切生成的 C:\axis2-1.5.6\samples\quickstart\build\StockQuoteService.aar 到 C:\apache-tomcat-7.0.55\webapps\axis2\WEB-INF\services 下面
http://localhost:8080/axis2/services/listServices
http://localhost:8080/axis2/services/StockQuoteService?wsdl
http://localhost:8080/axis2/services/StockQuoteService?xsd
http://localhost:8080/axis2/services/StockQuoteService/getPrice?symbol=IBM
http://localhost:8080/axis2/services/StockQuoteService/update?symbol=IBM&price=100
在这种方式下的开发顺序
1. 创建自己的pojo并编译
2. 根据pojo使用java2wsdl生成相应的wsdl
3. 编写server.xml
4. 将pojo的class和server.xml打包成 .aar包
5. 发布aar包,生成相应的web service
6. 直接通过uri 或者 使用客户端进行调用
quickstartaxiom (AXIOM)
- quickstartaxiom
- README.txt
- build.xml
- resources
- META-INF
- services.xml
- StockQuoteService.wsdl
- src
- samples
- quickstart
- service
- axiom
- StockQuoteService.java
- clients
- AXIOMClient.java
2. 使用java2wsdl生成相应的wsdl
cd C:\axis2-1.5.6\samples\quickstartaxiom\build\classes
java2wsdl -cp . -cn samples.quickstart.service.axiom.StockQuoteService -of StockQuoteService.wsdl
说明:其中-cp是指classpath -cn是指classname
出现错误:
[ERROR] Required MessageReceiver couldn't be found, thus, default MessageReceiver has been used
解决方式:
Note : You can safely ignore the error it displays.
3. 编写server.xml
4. 将pojo的class,server.xml,wsdl打包成 .aar包
5. 发布aar包,生成相应的web service
6. 编写AXIOMClient.java 客户端进行调用
输出结果
price updated Current price of WSO: 123.42
请参考文章
quickstartadb (ADB)
2. 使用wsdl2java生成相应的java代码
cd C:\axis2-1.5.6\samples\quickstartadb
wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.adb -d adb -s -ss -sd -ssi -o build\service
-ss The -ss switch creates the server side code (skeleton and related files)
-sd The -sd switch creates a service descriptor (services.xml file)
-ssi The -ssi switch creates an interface for the service skeleton.
3. 编写server.xml
4. 将pojo的class,server.xml,wsdl等打包成 .aar包
5. 发布aar包,生成相应的web service
http://localhost:8080/axis2/services/listServices
http://localhost:8080/axis2/services/StockQuoteService?wsdl
http://localhost:8080/axis2/services/StockQuoteService?xsd
6. 编写ADBClient.java 客户端进行调用
42 price updated 42.35
quickstartxmlbeans (XMLBEANS)
和adb类似
quickstartjibx (JIBX)
axis2五种创建服务方式的比较
实现方式 | 创建方式 | 应用文档对象模型解析(消息绑定) | 应用(数据绑定框架)解析 (xml to DO) 可插入的数据绑定 |
POJOs | pojo结合rpc模式 | AXIOM | POJOs POJO+RPC 优点:自己写客户端,容易出错,不用熟悉WSDL。 缺点:用此方法进行调试不容易 |
AXIOM | axiom api从底层写 | AXIOM | 优点:可以进行高效的 SOAP 消息处理 缺点:全部自己实现,不现实。 |
ADB | 从wsdl生成 相应框架, 然后填写相 应逻辑 | AXIOM | ADB 开发符合软件工程的过程,先写设计,定接口(写WSDL)然后再实现。用WSDL生成代码,不用关心底层的调用。 |
XMLBeans | AXIOM | XMLBean(BEA) | |
JiBX | AXIOM | JiBX |
ADB,首先使用命令行生成wsdl对应的Java Stub和Callback文件wsdl2java -uri http://localhost:8080/axis2/services/StockQuoteService?wsdl
AXIOM不需要wsdl2java,完全用axiom的类,封装不够好。
axis2 - 五种创建WebService方式比较
JavaBean类需满足 JavaBean规范,如采用标准的setter/getter方法设置成员变量.POJO只是普通的java类.可以认为,JavaBean类都是是POJO,但POJO类未必是JavaBean!
2:Building the service using AXIOM
需要我们在代码中,获取XML利用STAX进行获取相关返回值,和创建消息等.是一个比较底层的创建方式.比POJOS复杂.
SAX实际上是定义了一个拉式(pull)的xml解析器。 一般的解析xml是通过DOM或SAX形式。
DOM的问题是需要一次性读入整个XML,对于大型的xml效率低。STAX是基于事件, 当读取到文档的某个位置会触发到某个事件。而这个读取过程是不受控的, 就是必须一次读完(对这个不熟悉)。这就是所谓推(push)式的。
STAX也是类似于SAX的事件,但是是由client的next()来控制指针的前进, 是把文件的内容pull出来的。这大大增强了客户端的控制能力,例如写入和修改节点。
SAX:Simple API for XMLStAX(Streaming API for XML)是标准的XML处理API,它能够从应用程序的stream对象解析XML数据或把XML数据转换成stream对象。STAX是一个用Java实现的XML拉式解析器
3:Generating the service using ADB
(Axis2 Databinding Framework )
4:Generating the service using XMLBeans
5:Generating the service using JiBX
JiBX是一个为Java提供的XML数据绑定框架。它可以和现存的类一起运行,使用一个灵活的映射定义文件来决定如何将数据对象转换成XML
其中前面两种都是从基本的代码开始写起的.后面三种是从WSDL生成代码框架.
即把整个文件推给client。
XMLBean是Apache的一个开源项目,以如果有一个类似的工具能够实现将对XML的读写转成对JavaBean的操作,将会简化XML的读写,即使对XML不熟悉的开发人员也能方便地读写XML. 这个工具就是XMLBean.
关于javabean规范
(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值。
(3)一个javaBean类不应有公共实例变量,类变量都为private
(4)持有值应该通过一组存取方法(getXxx 和 setXxx)来访问:对于每个特性,应该有一个带匹配公用 getter 和 setter 方法的专用实例变量。