<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問(wèn);專(zhuān)其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks

    看一個(gè)簡(jiǎn)單的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. }  

    這是一個(gè)簡(jiǎn)單的web service,和寫(xiě)一個(gè)類(lèi)沒(méi)有任何不同。持有一個(gè)map對(duì)象,getPrice方法,通過(guò)傳入字符串,得到對(duì)應(yīng)的金額,update方法則是添加了一個(gè)字符串-金額的組合,它對(duì)應(yīng)的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>  

    這個(gè)服務(wù)很好理解。注意RPCInOnlyMessageReceiver和RPCMessageRecevier,前者是“只進(jìn)”的方法,后者是“可進(jìn)可出”的方法,分別對(duì)應(yīng)了getPrice(有參數(shù),有返回)和update(有參數(shù),無(wú)返回)方法。

    從現(xiàn)在開(kāi)始就要了解AXIOM了

    1、將上面的服務(wù)類(lèi)轉(zhuǎn)成用AXIOM來(lái)實(shí)現(xiàn),看看發(fā)生了什么

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

    天!代碼瞬間被膨脹了,參數(shù)都被OMElement代替了,這究竟發(fā)生了什么(請(qǐng)參看2:services.xml發(fā)生了什么),Axis2使用的是AXIOM(AXIs Object Model,一種基于StAX API的類(lèi)DOM結(jié)構(gòu))。使用了AXIOM,就規(guī)定了服務(wù)所定義的方法中的參數(shù)必須是OMElement類(lèi)型,所以我們看到參數(shù)的類(lèi)型都是OMElement了。而方法內(nèi)代碼膨脹也就不足為奇了。

    2、看看services.xml又發(fā)生了什么變化

    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發(fā)生了變化,操作被明確地定義了出來(lái),并定義了操作所對(duì)應(yīng)地MessageReceiver,如getPrice對(duì)應(yīng)的是RawXMLINOutMessageReceiver,而update方法對(duì)應(yīng)的成了RawXMLINOnlyMessageReceiver。

    這就是使用AXIOM發(fā)布的方式。對(duì)于AXIOM的理解將繼續(xù)更新。接下來(lái)應(yīng)該是真正理解AXIOM,包括它的性能,以及客戶(hù)端如何調(diào)用了。

     

    posted on 2007-11-21 18:05 禮物 閱讀(1967) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): web service
    主站蜘蛛池模板: jizzjizz亚洲日本少妇| 丁香六月婷婷精品免费观看| 亚洲AV成人精品日韩一区18p| 亚洲中文久久精品无码ww16| 最新中文字幕免费视频| 99精品视频在线观看免费专区| 免费一级毛片在线播放视频免费观看永久| 亚洲第一精品电影网| 亚洲精品乱码久久久久久中文字幕 | 一区二区视频在线免费观看| 亚洲综合av一区二区三区不卡| 亚洲尹人九九大色香蕉网站| 三上悠亚亚洲一区高清| 国产在线19禁免费观看| 好吊妞998视频免费观看在线| 免费h片在线观看网址最新| 青青草无码免费一二三区| 亚洲免费人成在线视频观看 | 日韩色视频一区二区三区亚洲| 99热这里只有精品6免费| 久久无码av亚洲精品色午夜| 在线免费观看亚洲| 亚洲国产精品第一区二区 | 牛牛在线精品免费视频观看| 亚洲中文字幕无码av永久| 亚洲人成网网址在线看| 亚洲系列中文字幕| 亚洲高清视频在线播放| 亚洲毛片在线观看| 久久精品国产亚洲AV高清热| 午夜亚洲www湿好大| 亚洲第一区香蕉_国产a| 久久丫精品国产亚洲av| 亚洲美女中文字幕| 亚洲精品在线播放视频| 亚洲人成网站在线观看播放动漫| 激情内射亚洲一区二区三区爱妻| 77777亚洲午夜久久多喷| 亚洲日韩一区二区三区| 99亚洲精品卡2卡三卡4卡2卡| 日本中文字幕免费看|