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

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

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

    Java, Only Java!

    統計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    WebSerivce-之使用AXIS開發(轉自勇哥的BLOG)

    一、 Axis 簡介

    什么是SOAP?

    SOAP 是一個應用程序間的基于XML的通信工具和規范。SOAP最初由MicroSoftUserland公司開發,已經演化了好幾個版本,當前的版本SOAP1.1正飛速發展。W3CXML協議工作組正努力把它發展為一個真正的開發的標準。SOAP1.2草案已經發布,它能澄清 1.1版規范的容易混淆的地方。

    SOAP 被廣泛作為新一代跨平臺、跨語言分布計算Web Services的重要部分。

    什么是Axis?

    Axis Apache eXtensible Interaction System)是一款開源的WebService運行引擎,它是SOAP協議的一個實現,其本身來源于Apache的另一個項目Apache SOAP Axis分為1.x系列和Axis 2系列,兩個系列體系結構和使用上有較大的區別,相對而言,Axis1.x更加穩定,文檔也比較齊全,因此本文內容以Axis 1.x系列最新版本1.4為基礎,AxisC++Java兩個版本的實現,本文描述Java版的Axis

    ?

    Axis 總體上是一個SOAP引擎。但又不僅僅是個引擎。它還:

    1)是一個簡單的獨立的SOAP服務器。

    2)是一個可插入到servlet引擎(Tomcat)中的服務。

    3)對WSDL的擴展支持。

    4)能將WSDL描述產生JAVA文件/類的工具。

    5)包括一些例子程序。

    6)包括一個可以監控TCP/IP包的工具。

    Axis
    起源于IBMSOAP4J,屬于最早的一批用于構造基于SOAP應用的Framework。是Apache SOAP的第三代產品,,其核心是一個SOAP處理器,用于開發包括客戶端,服務器端,SOAP Gateway等各種應用。相對于以前的版本,它有如下特性:

    1)快速,使用基于事件的SAX解析機制而不是DOM來處理XML請求。

    2)靈活,用戶可以靈活定制擴展。

    3)穩定,接口將會變動很小。

    4)基于組件開發。

    5Transport 框架 - Axis的核心和底層的transport完全分離,也就是說不管WSTransportHTTP FTP MAILMESSAGE QUEUE,只要插入對應的Transport模塊即可,而不需改動其他部分。

    6 )支持 WSDL1.1 ,可自動由 Java Object 生成 WSDL

    ?

    在目前發行1.1版本中有什么東西?
    1SOAP1.1/1.2引擎。
    2)靈活的配置和部署系統。
    3)支持及時自動生成SOAP服務(JWS)。
    4)支持所有的基本數據類型,為自定義串行操作提供類型映射系統。
    5JavaBean的自動串行操作,包括將自定義屬性類型映射到XML的屬性和元素。
    6RPC和基于消息的SOAP服務提供者。
    7)從部署好的服務自動生成WSDL
    8WSDL2Java工具可以從WSDL描述文件中產生相應的客戶和服務器端SOAP操作框架。
    9)初步提供安全擴展,能夠與Servlet2.2安全集成。
    10)通過HTTP Cookie和與傳輸無關的SOAP頭信息提供會話跟蹤。
    11)初步支持帶附件的SOAP消息。
    12)在EJB方面提供把EJB作為Web服務的訪問途經。
    13)基于ServletHTTP傳輸。
    14)基于JMS的傳輸。
    15)獨立的服務器(但需要HTTP 服務器和Servlet容器支持)。
    16)提供客戶端、服務器端相關應用程序的樣例。


    Axis
    的運行需要如下組件包:

    • SAAJ API( javax.xml.soap.SOAPMessage ) saaj.jar
    • JAX-RPC API( javax.xml.rpc.Service ) jaxrpc.jar
    • Apache-Axis( org.apache.axis.transport.http.AxisServlet ) axis.jar
    • Jakarta-Commons Discovery(org.apache.commons.discovery.Resource) commons-discovery.jar
    • Jakarta-Commons Logging(org.apache.commons.logging.Log) commons-logging-api.jar
    • Log4j(org.apache.log4j.Layout)log4j.jar
    • IBM's WSDL4Java(com.ibm.wsdl.factory.WSDLFactoryImpl) wsdl4j.jar
    • 下面非必須:
    • JAXP implementation[ Processing XML with Java ](javax.xml.parsers.SAXParserFactory )
    • Activation API(javax.activation.DataHandler ) activation.jar

    ?

    二、Axis的安裝

    應用Axis開發Web Services,你需要安裝如下軟件:

    1.JDK

    2. 一個支持Servlet的服務器引擎,比如:Tomcat

    當安裝好Tomcat之后,只需將下載的Axis軟件包解壓縮,將其中的“webapps”目錄下的“axis”目錄整個拷貝到Tomcat安裝目錄下的“webapps”目錄下即可。

    ?

    三、Axis的測試

    安裝配置完畢后,應測試一下是否Axis可以正確運行了。

    啟動Tomcat服務器,在瀏覽器中訪問http://localhost:8080/axis/happyaxis.jsp,如果頁面顯示有錯誤,則需要回頭檢查一下相關配置是否正確,如果瀏覽頁面能正確顯示出系統組件、屬性等參數配置信息,則表示安裝成功。現在可以開始開發你的Web Services應用了。

    ?

    四、服務的發布

    ?

    Axis 提供了兩種服務發布方式,

    一種是:即時發布Instant Deployment),

    一種是:定制發布Custom Deployment)。

    1. 使用即時發布 Java Web Service(JWS)

      對即時發布的支持是Axis的特色之一,使用即時發布使用戶只需有提供服務的Java類的源代碼,即可將其迅速發布成Web服務。每當用戶調用這類服務的時候,Axis會自動進行編譯,即使服務器重啟了也不必對其做任何處理,使用非常簡單快捷。

      使用即時發布首先需要一個實現服務功能的Java源文件,將其擴展名改為.jwsJava Web Service的縮寫),然后將該文件放到“……\webapps\axis”(只能放在axis根目錄)目錄下即可。

    ??? 在此給出一個從英里到公里的長度單位轉換的服務,其源碼如下:

    文件Distance.jws

    public class Distance

    {

    ??? public double convertMile2Kilometre( double mile )

    ??? {

    ? ????? return mile * 1.609;? // 實現英里到公里的距離轉換

    ??? }

    }

    將其放到“……\webapps\axis

    目錄,通過訪問http://localhost:8080/axis/Distance.jws?wsdl

    可以看到這個服務的WSDL描述文件,這說明Distance服務被成功發布了。

    編譯后的文件: axis\WEB-INF\jwsClasses\Distance.class,訪問

    http://localhost:8080/axis/Distance.jws?method=convertMile2Kilometre&mile=1000 可以看到執行結果。

    需要注意的是: JWS web 服務發布是一個很簡單的 Web 服務發布方式,在頁面中你不能使用包,而且由于代碼是在運行期被編譯的,所以在部署之后,你也很難找到錯誤所在。

    ?

    2. 使用定制發布 Web Service Deployment Descriptor(WSDD)

    ?

       即時發布是一項令人激動的技術,它使Web服務的開發變得如此簡單;然而即時發布并不總是最好的選擇,比如有些應用系統是第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個應用系統的一些功能對外發布成Web服務,使其能夠在更大范圍內產生作用,這個時候即時發布技術就無能為力了。此外,即時發布技術并不靈活,無法進行更多的服務配置,這使得它并不能滿足一些特定系統的需求。

      因此,Axis提供了另一種服務發布方式,這就是定制發布。

      在此給出一個從加侖到升的容積單位轉換的服務,其源碼如下:

      文件Capacity.java

    ??? package test.capacity;

    ??? public class Capacity

    ??? {

    ??????? public double convertGallon2Litre( double gallon )

    ? ?????? {

    ???? ??????return gallon * 4.546;// 實現加侖到升的容積轉換

    ? ??????? }//convertGallon2Litre()

    ?? ??}

    將其編譯成.class文件,放置到“……

    \webapps\axis\WEB-INF\classes\test\capacity ”目錄下,即可著手進行發布。

    ??? 定制發布不需要構建.jws文件,但必須創建服務發布描述文件deploy.wsddWeb Service Deployment Descriptor的縮寫),這個文件負責描述服務的名稱、入口等信息,其內容如下:

    ??? 文件deploy.wsdd

    <deployment

    xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    ??? <service name="Capacity" provider="java:RPC">

    ??????? <parameter name="className" value="test.capacity.Capacity"/>

    ??????? <parameter name="allowedMethods" value="*"/>

    ??? </service>

    </deployment>

    ?

    ??? 在這里服務的提供者是“java:RPC”,它被內建在Axis中,而且指明了一個JAVA RPC服務,做這個處理的類是org.apache.axis.providers.java.RPCProvider

    ??? 我們是通過一個<parameter>標簽告訴RPC服務應該調用的類,而另外一個<parameter>標簽則告訴引擎,它可以調用這個類中的任何的Public方法。你也可以指定通過使用名字空間或者一些可以調用的方法列表,來指明那些方法可以被調用。

    ?

      將該文件也放到“……\webapps\axis\WEB-INF\classes\test\capacity”目錄下,然后可以采用Axis提供的一個客戶端管理工具——AdminClient來完成服務的定制發布。

    ?? 在“……\webapps\axis\test\capacity”目錄下,運行:

    ?

    set axis_lib=C:\apache-tomcat-5.5.17\webapps\axis\WEB-INF\lib

    set axis_path=%axis_lib%\axis.jar;%axis_lib%\commons-discovery.jar;%axis_lib%\jaxrpc.jar;%axis_lib%\commons-logging.jar;%axis_lib%\log4j.jar;%axis_lib%\wsdl4j.jar;%axis_lib%\saaj.jar

    ?

    java -classpath %axis_path% org.apache.axis.client.AdminClient deploy.wsdd

    java -cp %axis_path% org.apache.axis.client.AdminClient list

    ? ?

    ?

    ?? 如果運行時說沒有找到類,那么可能是類路徑沒有配置好,建議將所有的與axis相關的jar都寫到classpath中去。這樣只要運行:

    ?

    ?? java org.apache.axis.client.AdminClient deploy.wsdd

    ?? 可以看到以下運行結果:

    ?

    ?Processing file deploy.wsdd

    ?<Admin>Doneprocessing</Admin>

    ?

    這表明Capacity服務定制發布完成。

    ?

    發布完成會增加或更新WEB-INF\server-config.wsdd的文件或內容。

    ?

    <!-- handler -->

    ??? <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />

    ??? <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />

    ??? <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />

    ???

    ??? <!-- 系統服務

    ??? <service name="AdminService" provider="java:MSG">

    ?????? <parameter name="allowedMethods" value="AdminService" />

    ?????? <parameter name="enableRemoteAdmin" value="false" />

    ?????? <parameter name="className" value="org.apache.axis.utils.Admin" />

    ?????? <namespace>http://xml.apache.org/axis/wsdd/</namespace>

    ??? </service>

    ??? <service name="Version" provider="java:RPC">

    ?????? <parameter name="allowedMethods" value="getVersion" />

    ?????? <parameter name="className" value="org.apache.axis.Version" />

    ??? </service>

    ??? ?-->

    ??? <!-- 自定義服務 -->

    ??? <service name="Capacity" provider="java:RPC">

    ?????? <parameter name="allowedMethods" value="*" />

    ?????? <parameter name="className" value="test.capacity.Capacity" />

    ??? </service>

    ?????? ?

    ??? <!-- transport to handler -->

    ??? <transport name="http">

    ?????? <requestFlow>

    ?????????? <handler type="URLMapper" />

    ?????????? <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />

    ?????? </requestFlow>

    ?????? <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler" />

    ?????? <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" />

    ?????? <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler" />

    ?????? <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler" />

    ?????? <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler" />

    ?????? <parameter name="qs.wsdl"?? value="org.apache.axis.transport.http.QSWSDLHandler" />

    ??? </transport>?

    ??? <transport name="local">

    ?????? <responseFlow>

    ?????????? <handler type="LocalResponder" />

    ?????? </responseFlow>

    ??? </transport>

    ?

    ?? 你也可以調用:

    undeploy.wsdd 文件:

    <undeployment

    ??? xmlns="http://xml.apache.org/axis/wsdd/"

    ??? xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    ??? <service name="Capacity"/>

    </undeployment>

    ?

    ?java org.apache.axis.client.AdminClient undeploy.wsdd? 來取消部署。

    ?

    ?? 你也可以調用:

    ?java org.apache.axis.client.AdminClient list 來獲得所有的已經部署的服務的列表。在這里你會看到services, handlers, transports等等,注意這個調用只是列出了WEB-INF\server-config.wsdd的文件內容。

    ?

    ?? 一定要注意:編譯后的class文件要拷貝到web-inf/classes的目錄中,如果該文件中有包存在的話,別忘了還要在classes目錄下創建包的目錄。

    ?? 通過訪問http://localhost:8080/axis/services/Capacity?wsdl可以看到這個服務的WSDL描述文件,這說明Capacity服務被成功發布了。

    ?? 你也可以通過訪問http://localhost:8080/axis/servlet/AxisServlet查看所有定制發布的服務。

    訪問:

    http://localhost:8080/axis/services/Capacity?method=convertGallon2Litre&gallon=100 可以看到執行結果。

    ?

    ?Web.xml

    <servlet>

    ?????? <servlet-name>AxisServlet</servlet-name>

    ?????? <servlet-class>

    ?????????? org.apache.axis.transport.http.AxisServlet

    ?????? </servlet-class>

    ??? </servlet>

    ??? <servlet-mapping>

    ?????? <servlet-name>AxisServlet</servlet-name>

    ?????? <url-pattern>*.jws</url-pattern>

    ??? </servlet-mapping>

    ??? <servlet-mapping>

    ?????? <servlet-name>AxisServlet</servlet-name>

    ?????? <url-pattern>/servlet/AxisServlet</url-pattern>

    ??? </servlet-mapping>??

    ??? <servlet-mapping>

    ?????? <servlet-name>AxisServlet</servlet-name>

    ?????? <url-pattern>/services/*</url-pattern>

    ??? </servlet-mapping>??

    ???

    ??? <servlet>

    ?????? <servlet-name>AdminServlet</servlet-name>

    ?????? <servlet-class>

    ?????????? org.apache.axis.transport.http.AdminServlet

    ?????? </servlet-class>

    ?????? <load-on-startup>100</load-on-startup>

    ??? </servlet>

    ??? <servlet-mapping>

    ?????? <servlet-name>AdminServlet</servlet-name>

    ?????? <url-pattern>/servlet/AdminServlet</url-pattern>

    ??? </servlet-mapping>

    ?

    posted on 2008-03-03 09:50 zYx.Tom 閱讀(1322) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 在线观看国产区亚洲一区成人| 四虎永久免费地址在线观看| 亚洲AV无码成人精品区在线观看| 日本免费精品一区二区三区| 五月天婷亚洲天综合网精品偷| 国产精品亚洲一区二区无码 | 国产一级高清视频免费看| 亚洲欧美国产国产综合一区 | 亚洲国产精品成人网址天堂| 国产亚洲精品国产福利在线观看| 深夜国产福利99亚洲视频| 国产国产人免费人成成免视频| 亚洲AV无码欧洲AV无码网站| 最近免费最新高清中文字幕韩国| 亚洲精品**中文毛片| 成人毛片18女人毛片免费| 老司机午夜免费视频| 亚洲av中文无码乱人伦在线r▽| 57pao国产成视频免费播放| 中文字幕亚洲综合久久综合| 又黄又爽一线毛片免费观看 | 亚洲AV无码无限在线观看不卡| 成人无遮挡毛片免费看| 美女被免费网站视频在线| 亚洲另类激情综合偷自拍图| 99re在线这里只有精品免费| 亚洲熟妇AV乱码在线观看| 亚洲人成网站18禁止一区| 99re6免费视频| 亚洲成av人片天堂网无码】| 中文字幕亚洲乱码熟女一区二区 | 4444亚洲国产成人精品| 大学生高清一级毛片免费| g0g0人体全免费高清大胆视频| 久久久久久a亚洲欧洲AV| 四虎永久在线精品免费网址| 无套内谢孕妇毛片免费看看| 亚洲一区二区影院| 国产一区二区三区免费视频| 一级毛片**不卡免费播| 性色av极品无码专区亚洲|