Axis2 创建 web service (3) : 示例解读
来源:互联网 发布:excel macro编程 编辑:程序博客网 时间:2024/06/05 10:47
对于一个工具来说,最重要的是读懂里面的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
目录
- Introduction
- Getting Ready
- Axis2 services
- Creating services
- Deploying POJOs
- Building the service using AXIOM
- Generating the service using ADB
- Generating the service using XMLBeans
- Generating the service using JiBX
- Generating Clients
- Creating a client using AXIOM
- Generating a client using ADB
- Generating a client using XML Beans
- Generating a client using JiBX
- Summary
*.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 updatedCurrent price of WSO: 123.42
请参考文章
http://danlley.iteye.com/blog/102164
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 客户端进行调用
42price updated42.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 方法的专用实例变量。
- Axis2 创建 web service (3) : 示例解读
- axis2创建web service
- axis2创建web service
- axis2创建web service
- axis2创建web service
- axis2创建web service(2)
- SOA [ axis2 创建 Web Service ]
- Axis2创建web service的工具准备
- axis2创建web service(三)
- axis2创建web service(一)
- axis2创建web service(二)
- axis2创建web service(一)
- axis2创建web service(三)
- axis2创建web service(四)
- axis2创建web service(一)
- axis2创建web service(二)
- axis2创建web service(三)
- axis2创建web service(四)
- Matlab保存图像的方法总结
- Unable to get system library for the project
- C/C++输入输出流总结
- Android入门第八篇之GridView
- USACO Section 1.4 - Arithmetic Progressions (暴力)
- Axis2 创建 web service (3) : 示例解读
- 安装mysql和memcached
- Android——使用SQLite数据库访问
- Tchart的旋转动画 (评估板源码)
- C++ 构造/析构函数中的异常处理
- 原型模式(ProtoType)
- 【LeetCode】Word Break
- RMQ and LCA
- java中的构造函数有什么用?用它有什么好处?在什么地方用?