看一个简单的Web Service
java 代码
- package org.jivaro.sq;
-
- import java.util.HashMap;
-
- public class StockQuoteService {
- private HashMap map = new HashMap();
-
- public double getPrice(String symbol) {
- System.out.println("Parameter Symbole : " + symbol);
- Double price = (Double) map.get(symbol);
- if(price != null) {
- return price.doubleValue();
- }
- return 42.00;
- }
-
- public void update(String symbol, double price) {
- map.put(symbol, price);
- }
- }
这是一个简单的web service,和写一个类没有任何不同。持有一个map对象,getPrice方法,通过传入字符串,得到对应的金额,update方法则是添加了一个字符串-金额的组合,它对应的services.xml如下:
xml 代码
- <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">
- org.jivaro.sq.StockQuoteService
- parameter>
- service>
这个服务很好理解。注意RPCInOnlyMessageReceiver和RPCMessageRecevier,前者是“只进”的方法,后者是“可进可出”的方法,分别对应了getPrice(有参数,有返回)和update(有参数,无返回)方法。
从现在开始就要了解AXIOM了
1、将上面的服务类转成用AXIOM来实现,看看发生了什么
java 代码
- package org.jivaro.sq;
-
- import javax.xml.stream.XMLStreamException;
- import org.apache.axiom.om.OMAbstractFactory;
- import org.apache.axiom.om.OMElement;
- import org.apache.axiom.om.OMFactory;
- import org.apache.axiom.om.OMNamespace;
-
- import java.util.HashMap;
-
- public class StockQuoteAxiomService {
- private HashMap map = new HashMap();
-
- public OMElement getPrice(OMElement element) throws XMLStreamException {
- element.build();
- element.detach();
-
- OMElement symboleElement = element.getFirstElement();
- String symbol = symboleElement.getText();
-
- String returnText = "42";
- Double price = (Double) map.get(symbol);
-
- if(price != null) {
- returnText = "" + price.doubleValue();
- }
-
- OMFactory fac = OMAbstractFactory.getOMFactory();
- OMNamespace omNs = fac.createOMNamespace("http://sq.jivaro.org", "tns");
- OMElement method = fac.createOMElement("getPriceResponse", omNs);
- OMElement value = fac.createOMElement("price", omNs);
- value.addChild(fac.createOMText(value, returnText));
- method.addChild(value);
-
- return method;
- }
-
- public void update(OMElement element) throws XMLStreamException {
- element.build();
- element.detach();
-
- OMElement symbolElement = element.getFirstElement();
- String symbol = symbolElement.getText();
-
- OMElement priceElement = (OMElement)symbolElement.getNextOMSibling();
- String price = priceElement.getText();
-
- map.put(symbol, new Double(price));
- }
- }
天!代码瞬间被膨胀了,参数都被OMElement代替了,这究竟发生了什么(请参看2:services.xml发生了什么),Axis2使用的是AXIOM(AXIs Object Model,一种基于StAX API的类DOM结构)。使用了AXIOM,就规定了服务所定义的方法中的参数必须是OMElement类型,所以我们看到参数的类型都是OMElement了。而方法内代码膨胀也就不足为奇了。
2、看看services.xml又发生了什么变化
xml 代码
- <service name="StockQuoteService" scope="application">
- <description>
- Stock Quote Service
- description>
- <operation name="getPrice">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
- operation>
- <operation name="update">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
- operation>
- <parameter name="ServiceClass">org.jivaro.sq.StockQuoteAxiomServiceparameter>
- service>
services.xml发生了变化,操作被明确地定义了出来,并定义了操作所对应地MessageReceiver,如getPrice对应的<messagereceiver></messagereceiver>是RawXMLINOutMessageReceiver,而update方法对应的<messagereceiver></messagereceiver>成了RawXMLINOnlyMessageReceiver。
这就是使用AXIOM发布的方式。对于AXIOM的理解将继续更新。接下来应该是真正理解AXIOM,包括它的性能,以及客户端如何调用了。
分享到:
相关推荐
axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata-1.5.4.jar axis2-mtompolicy-1.5.4.jar axis2-saaj-...
它有着明确的设计目标:大幅提升 Apache 下一代 SOAP 协议栈 Axis 2 的性能。结果造就了不同于其他对象模型的 AXIOM(也称为 OM),因为它突出了构造的轻型,并且 仅当需要的时候才建立. 这里是它的api 文档
Axis2的基本运行时库包括了`axis2-*.jar`文件,例如`axis2-adb.jar`、`axis2-kernel.jar`等,它们提供了Axis2的核心功能,如服务部署、消息处理和模块管理。`adb`代表“抽象数据绑定”,它是Axis2的一种数据绑定机制...
总的来说,了解和掌握Axis1.x与Axis2.x的区别和使用方法,对于Java Web服务开发者来说至关重要。这不仅涉及到选择合适的框架,也关系到如何有效地部署、管理和优化Web服务。在实际工作中,应根据项目需求和团队的...
4. **依赖库**:为了正常工作,Axis2依赖于一系列第三方库,如`wsdl4j.jar`, `neethi.jar`, `axiom-api.jar`, `axiom-impl.jar`等。这些库通常位于`lib`目录下,负责处理XML解析、WS-I兼容性以及WS-Policy等标准。 ...
了解并熟练使用Axis1.4和Axis2的相关jar文件,对于开发和维护Web服务至关重要。这不仅可以帮助开发者快速构建服务,还能确保与现有系统和其他Web服务的互操作性。在实际项目中,应根据具体需求选择适合的版本,同时...
1、axis2相关jar包如下: axiom-api-1.2.10.jar axiom-dom-1.2.10.jar axiom-impl-1.2.10.jar axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-...
1. 安装Axis2:首先,你需要下载并安装Apache Axis2的最新版本。解压到本地文件系统,通常包含bin、lib和repository等目录。 2. 创建服务代理:使用WSDL(Web服务描述语言)文件,你可以通过Axis2的wsdl2java工具...
8. **多语言支持**:尽管轴心是Java实现,但通过 Axis2 的AXIOM(抽象XML信息模型)层,可以与其他语言如C、PHP和Python进行交互。 在压缩包"axis2-1.6.2"中,你可以找到以下组件: - **库文件**:包含各种jar文件...
axis2 webservice 服务端jar包: -->axis2-kernel-1.6.1.jar -->axis2-spring-1.6.1.jar -->axis2-transport-http-1.6.1.jar -->XmlSchema-1.4.7.jar -->wsdl4j-1.6.2.jar -->axiom-api-1.2.12.jar -->axiom...
5. **序列化与反序列化(Serialization & Deserialization)**:Axis2 使用Axiom(抽象XML消息对象模型)处理XML消息的序列化和反序列化。源码分析有助于理解数据如何在SOAP消息和Java对象间转换。 6. **部署...
标题中的“Axis2依赖的所有jar包”指的是Apache Axis2框架运行所必需的Java库文件,这些文件以.jar格式存在,包含了各...因此,了解每个jar包的作用以及它们如何协同工作,是深入理解Axis2和Web服务开发的重要步骤。
3. **高性能**:Axis2利用了高效的二进制消息格式Axiom(Abstract XML Messaging),降低了XML解析的开销,提高了服务处理速度。 4. **多协议支持**:Axis2不仅支持SOAP 1.1和1.2,还支持RESTful Web服务,以及WS-...
- **消息处理**:Axis2使用Axiom(Apache Object Model)处理XML消息,提供了更高效的XML处理能力。 - **多协议支持**:除了SOAP,Axis2还支持REST、MTOM(Message Transmission Optimization Mechanism)和SwA...
5. 了解Axis2的模块化结构和可扩展性。 总的来说,"Axis2例子Demo"是一个宝贵的资源,可以帮助开发者快速上手并熟练掌握Axis2框架,从而在实际项目中高效地开发和部署Web服务。通过深入学习和实践,你可以进一步...
wsdl2java -uri http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl -p com.xing.tif.axis2.cient -o H:\axis
通过阅读《Apache Axis2 - Axis2 Architecture Guide》和《Apache Axis2 - Axis2 Quick Start Guide》这两份文档,你可以更全面地了解Axis2的架构细节和实际应用,从而在开发SOAP服务时更加得心应手。这两份资源将...
首先,了解 Axis2 的核心概念。Axis2 是基于 Axis1 进行优化和改进的,它采用了模块化的设计,允许开发者根据需求选择必要的组件,提高了灵活性和性能。Axis2 包含了处理SOAP消息、管理服务和服务容器等多个模块,...
通过学习和分析这些示例,开发者能够快速掌握Seasar2 Axis2的使用方法,并将其应用到自己的项目中。 总结起来,Seasar2 Axis2实例展示了如何利用这两个强大的工具集来构建高效、可扩展的Web服务应用。通过对Seasar2...
使用Axiom,Axis2能够快速解析和生成SOAP消息,同时保持较低的内存占用。 总的来说,Apache Axiom API是一个强大的XML处理工具,尤其适用于处理大型XML文档和构建Web服务。通过其高效的DOM实现、流式处理能力和与 ...