`
javalion
  • 浏览: 13570 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Axis2:快速了解AXIOM

阅读更多

看一个简单的Web Service

java 代码
  1. package org.jivaro.sq;   
  2.   
  3. import java.util.HashMap;   
  4.   
  5. public class StockQuoteService {   
  6.     private HashMap map = new HashMap();   
  7.        
  8.     public double getPrice(String symbol) {   
  9.         System.out.println("Parameter Symbole : " + symbol);   
  10.         Double price = (Double) map.get(symbol);   
  11.         if(price != null) {   
  12.             return price.doubleValue();   
  13.         }   
  14.         return 42.00;   
  15.     }   
  16.        
  17.     public void update(String symbol, double price) {   
  18.         map.put(symbol, price);   
  19.     }   
  20. }  

这是一个简单的web service,和写一个类没有任何不同。持有一个map对象,getPrice方法,通过传入字符串,得到对应的金额,update方法则是添加了一个字符串-金额的组合,它对应的services.xml如下:

xml 代码
  1. <service name="StockQuoteService" scope="application">  
  2.     <description>  
  3.         Stock Quote Sample Service   
  4.     description>  
  5.     <messageReceivers>  
  6.         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>  
  7.         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>  
  8.     messageReceivers>  
  9.     <parameter name="ServiceClass">  
  10.         org.jivaro.sq.StockQuoteService   
  11.     parameter>  
  12. service>  

这个服务很好理解。注意RPCInOnlyMessageReceiver和RPCMessageRecevier,前者是“只进”的方法,后者是“可进可出”的方法,分别对应了getPrice(有参数,有返回)和update(有参数,无返回)方法。

从现在开始就要了解AXIOM了

1、将上面的服务类转成用AXIOM来实现,看看发生了什么

java 代码
  1. package org.jivaro.sq;   
  2.   
  3. import javax.xml.stream.XMLStreamException;   
  4. import org.apache.axiom.om.OMAbstractFactory;   
  5. import org.apache.axiom.om.OMElement;   
  6. import org.apache.axiom.om.OMFactory;   
  7. import org.apache.axiom.om.OMNamespace;   
  8.   
  9. import java.util.HashMap;   
  10.   
  11. public class StockQuoteAxiomService {   
  12.     private HashMap map = new HashMap();   
  13.        
  14.     public OMElement getPrice(OMElement element) throws XMLStreamException {   
  15.         element.build();   
  16.         element.detach();   
  17.            
  18.         OMElement symboleElement = element.getFirstElement();   
  19.         String symbol = symboleElement.getText();   
  20.            
  21.         String returnText = "42";   
  22.         Double price = (Double) map.get(symbol);   
  23.            
  24.         if(price != null) {   
  25.             returnText = "" + price.doubleValue();   
  26.         }   
  27.            
  28.         OMFactory fac = OMAbstractFactory.getOMFactory();   
  29.         OMNamespace omNs = fac.createOMNamespace("http://sq.jivaro.org""tns");   
  30.         OMElement method = fac.createOMElement("getPriceResponse", omNs);   
  31.         OMElement value = fac.createOMElement("price", omNs);   
  32.         value.addChild(fac.createOMText(value, returnText));   
  33.         method.addChild(value);   
  34.            
  35.         return method;   
  36.     }   
  37.        
  38.     public void update(OMElement element) throws XMLStreamException {   
  39.         element.build();   
  40.         element.detach();   
  41.            
  42.         OMElement symbolElement = element.getFirstElement();   
  43.         String symbol = symbolElement.getText();   
  44.            
  45.         OMElement priceElement = (OMElement)symbolElement.getNextOMSibling();   
  46.         String price = priceElement.getText();   
  47.            
  48.         map.put(symbol, new Double(price));   
  49.     }   
  50. }  

天!代码瞬间被膨胀了,参数都被OMElement代替了,这究竟发生了什么(请参看2:services.xml发生了什么),Axis2使用的是AXIOM(AXIs Object Model,一种基于StAX API的类DOM结构)。使用了AXIOM,就规定了服务所定义的方法中的参数必须是OMElement类型,所以我们看到参数的类型都是OMElement了。而方法内代码膨胀也就不足为奇了。

2、看看services.xml又发生了什么变化

xml 代码
  1. <service name="StockQuoteService" scope="application">  
  2.     <description>  
  3.         Stock Quote Service   
  4.     description>  
  5.     <operation name="getPrice">  
  6.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>  
  7.     operation>  
  8.     <operation name="update">  
  9.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>  
  10.     operation>  
  11.     <parameter name="ServiceClass">org.jivaro.sq.StockQuoteAxiomServiceparameter>  
  12. service>  

services.xml发生了变化,操作被明确地定义了出来,并定义了操作所对应地MessageReceiver,如getPrice对应的<messagereceiver></messagereceiver>是RawXMLINOutMessageReceiver,而update方法对应的<messagereceiver></messagereceiver>成了RawXMLINOnlyMessageReceiver。

这就是使用AXIOM发布的方式。对于AXIOM的理解将继续更新。接下来应该是真正理解AXIOM,包括它的性能,以及客户端如何调用了。

分享到:
评论

相关推荐

    axis2 axiom api 文档

    它有着明确的设计目标:大幅提升 Apache 下一代 SOAP 协议栈 Axis 2 的性能。结果造就了不同于其他对象模型的 AXIOM(也称为 OM),因为它突出了构造的轻型,并且 仅当需要的时候才建立. 这里是它的api 文档

    Axis_API和axis2_API

    了解了Axis和Axis2的基本概念后,我们可以进一步研究压缩包中的"Axis和Axis2的API"文件。这些文件可能包含上述提到的API参考、教程和示例代码,它们是学习和开发基于Axis或Axis2的Web服务不可或缺的资源。通过仔细...

    axis2所用jar包大全下载

    Axis2的基本运行时库包括了`axis2-*.jar`文件,例如`axis2-adb.jar`、`axis2-kernel.jar`等,它们提供了Axis2的核心功能,如服务部署、消息处理和模块管理。`adb`代表“抽象数据绑定”,它是Axis2的一种数据绑定机制...

    axis2相关的jar包

    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-...

    axis2-1.7.7-bin.zip下载

    4. **依赖库**:为了正常工作,Axis2依赖于一系列第三方库,如`wsdl4j.jar`, `neethi.jar`, `axiom-api.jar`, `axiom-impl.jar`等。这些库通常位于`lib`目录下,负责处理XML解析、WS-I兼容性以及WS-Policy等标准。 ...

    axis 1.x与axis2.x开发

    总的来说,了解和掌握Axis1.x与Axis2.x的区别和使用方法,对于Java Web服务开发者来说至关重要。这不仅涉及到选择合适的框架,也关系到如何有效地部署、管理和优化Web服务。在实际工作中,应根据项目需求和团队的...

    axis1.4和axis2相关jar文件

    了解并熟练使用Axis1.4和Axis2的相关jar文件,对于开发和维护Web服务至关重要。这不仅可以帮助开发者快速构建服务,还能确保与现有系统和其他Web服务的互操作性。在实际项目中,应根据具体需求选择适合的版本,同时...

    axis2-1.6.2.zip

    8. **多语言支持**:尽管轴心是Java实现,但通过 Axis2 的AXIOM(抽象XML信息模型)层,可以与其他语言如C、PHP和Python进行交互。 在压缩包"axis2-1.6.2"中,你可以找到以下组件: - **库文件**:包含各种jar文件...

    完整的axis2 jar包包含实例.zip

    axis2 webservice 服务端jar包: --&gt;axis2-kernel-1.6.1.jar --&gt;axis2-spring-1.6.1.jar --&gt;axis2-transport-http-1.6.1.jar --&gt;XmlSchema-1.4.7.jar --&gt;wsdl4j-1.6.2.jar --&gt;axiom-api-1.2.12.jar --&gt;axiom...

    axis2相关jar包~eclipse支持插件包

    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-...

    axis2客户端生成java代码的jar包以及依赖jar包

    1. 安装Axis2:首先,你需要下载并安装Apache Axis2的最新版本。解压到本地文件系统,通常包含bin、lib和repository等目录。 2. 创建服务代理:使用WSDL(Web服务描述语言)文件,你可以通过Axis2的wsdl2java工具...

    axis2-1.6.4源码

    5. **序列化与反序列化(Serialization & Deserialization)**:Axis2 使用Axiom(抽象XML消息对象模型)处理XML消息的序列化和反序列化。源码分析有助于理解数据如何在SOAP消息和Java对象间转换。 6. **部署...

    Axis2依赖的所有jar包

    标题中的“Axis2依赖的所有jar包”指的是Apache Axis2框架运行所必需的Java库文件,这些文件以.jar格式存在,包含了各...因此,了解每个jar包的作用以及它们如何协同工作,是深入理解Axis2和Web服务开发的重要步骤。

    axis.war axis2.war

    - **消息处理**:Axis2使用Axiom(Apache Object Model)处理XML消息,提供了更高效的XML处理能力。 - **多协议支持**:除了SOAP,Axis2还支持REST、MTOM(Message Transmission Optimization Mechanism)和SwA...

    Axis2例子Demo

    5. 了解Axis2的模块化结构和可扩展性。 总的来说,"Axis2例子Demo"是一个宝贵的资源,可以帮助开发者快速上手并熟练掌握Axis2框架,从而在实际项目中高效地开发和部署Web服务。通过深入学习和实践,你可以进一步...

    axis2解析webservice接口

    wsdl2java -uri http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl -p com.xing.tif.axis2.cient -o H:\axis

    axis2 高端教程

    通过阅读《Apache Axis2 - Axis2 Architecture Guide》和《Apache Axis2 - Axis2 Quick Start Guide》这两份文档,你可以更全面地了解Axis2的架构细节和实际应用,从而在开发SOAP服务时更加得心应手。这两份资源将...

    axis2相关jar包

    3. **高性能**:Axis2利用了高效的二进制消息格式Axiom(Abstract XML Messaging),降低了XML解析的开销,提高了服务处理速度。 4. **多协议支持**:Axis2不仅支持SOAP 1.1和1.2,还支持RESTful Web服务,以及WS-...

    s2axis2 实例

    通过学习和分析这些示例,开发者能够快速掌握Seasar2 Axis2的使用方法,并将其应用到自己的项目中。 总结起来,Seasar2 Axis2实例展示了如何利用这两个强大的工具集来构建高效、可扩展的Web服务应用。通过对Seasar2...

    axiom api

    使用Axiom,Axis2能够快速解析和生成SOAP消息,同时保持较低的内存占用。 总的来说,Apache Axiom API是一个强大的XML处理工具,尤其适用于处理大型XML文档和构建Web服务。通过其高效的DOM实现、流式处理能力和与 ...

Global site tag (gtag.js) - Google Analytics