Webservice使用和開發指南
阿新 • • 發佈:2019-01-31
Webservice開發和使用指南
1修改歷史
2目的和範圍
這是一篇關於webservcie相關知識的介紹,其中主要包括:使用axis來進行開發和測試、axis和spring整合開發、aixs和web服務期整合開發、通過ObjectWeb Lomboz工具生成客戶端和伺服器程式碼方式等等。
核心內容包括: axis命令級別的詳細解釋、axis和spring相互結合開發指南、開發步驟的梳理和解釋。本文只提到了Axis2的基本概念,詳細知識,可以參見Axis2的相關文件。
這是重量級別的文章,對webservice知識點和axis的使用命令涉及到比較多。
2.1主要內容包括
1、關於webservice的基本概念
2、Axis相關概念和命令。
3、開發和測試工具,程式碼例項。
4、開發客戶端和伺服器端的開發流程。
5、開發的詳細的命令介紹。
6、如何測試的方法。
7、釋出的步驟。
8、日誌跟蹤機制。
9、其他優秀文章。
10、相關參考資料的介紹。
11、其他文件的釋出路線圖。
2.2本文的特色
1、有助於理解webservice深層的設計思想。因為沒有使用eclipse外掛,強迫你每次可以看axis相關的知識,必然對相關的概念、程式碼的架構設計,可以對自動生成的程式碼的命名、呼叫細節,有比較深的理解,例如:Proxy模式的設計。
2、增強你對工程的管理能力。 當生成程式碼時,你將每次手工的設定wsdl檔名稱、路徑名稱等等,處處在影響這你。Ant是管理java的強大的工具,應用最廣泛。無論多牛的開發圖形工具,它的後臺,對工程的管理,很多都是採用ant命令呼叫。
3、提高你的測試能力。在附件中的工程,生成的程式碼支援Junit測試的java程式碼。通過測試,當你在你應用中呼叫時,通過copy、paste就可以搞定。
4、增強你的思考能力。有些知識,網上是找不到的,這恰恰是你的機會,同時也是公司的機會,因為公司是單個人組成的。通過思考,通過動手,才能突破一些難點。例如:hibernate的Callback程式碼設計、強大的Template方法、多執行緒下資料同步和持久化、不同Ip之上資料表的操作訪問,程式管理表和物理管理表的設計模式。網上,沒人告訴你。不詳細的它的原始碼呼叫和相關規範,很難搞清楚。
5、詳細和大量的程式碼例項。這樣可以方便你引用,這些所有的程式碼和build.xml檔案,都是經過測試和應用過的。
2.3關於例項工程
考慮到,容量比較大,可能要自己到網站下載。參見:相關資源。
3Web Service基本概念
3.1基本組成
由兩部分組成
·SOAP--Web Service之間的基本通訊協議。
·WSDL--Web Service描述語言,它定義了Web Service做什麼,怎麼做和查詢的資訊。
The Web Service Description Language is a specification authored by IBM and Microsoft, and supported by many other organizations. WSDL serves to describe Web Services in a structured way. A WSDL description of a service tells us, in a machine-understandable way, the interface to the service, the data types it uses, and where the service is located.
Handler
A reusable class which is responsible for processing a MessageContext in some custom way. The Axis engine invokes a series of Handlers whenever a request comes in from a client or a transport listener.
SOAP
The Simple Object Access Protocol (yes, despite the fact that it sometimes doesn't seem so simple, and doesn't have anything to do with objects... :)). You can read the SOAP 1.1 specification at http://www.w3.org/TR/SOAP. The W3C is currently in the midst of work on SOAP 1.2, under the auspices of the XML Protocol Group.
Provider
A provider is the "back-end" Handler which is responsible for actually performing the "meat" of the desired SOAP operation. Typically this means calling a method on some back-end service object. The two commonly used providers are RPCProvider and MsgProvider, both in the org.apache.axis.providers.java package.
3.2什麼是 Webservice?
Web 是使應用程式可以以與平臺和程式語言無關的方式進行相互通訊的一項技術。Web 服務是一個軟體介面,它描述了一組可以在網路上通過標準化的 XML 訊息傳遞訪問的操作。它使用基於 XML 語言的協議來描述要執行的操作或者要與另一個 Web 服務交換的資料。一組以這種方式互動的 Web 服務在面向服務的體系結構(Service-Oriented Architecture,SOA)中定義了特殊的 Web 服務應用程式。
3.3什麼是SOAP?
SOAP(Simple Object Access Protocol )簡單物件訪問協議是在分散或分散式的環境中交換資訊並執行遠端過程呼叫的輕量級協議,是一個基於XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最常用的還是HTTP協議),可以允許任何型別的物件或程式碼,在任何平臺上,以任何一種語言相互通訊。
SOAP包括四個部分:SOAP封裝(envelop),封裝定義了一個描述訊息中的內容是什麼,是誰傳送的,誰應當接受並處理它以及如何處理它們的框架;SOAP編碼規則(encoding rules),用於表示應用程式需要使用的資料型別的例項;SOAP RPC表示(RPC representation),表示遠端過程呼叫和應答的協定;SOAP繫結(binding),使用底層協議交換資訊。
應用中比較關注的是envelop,由一個或多個Header和一個Body組成。
SOAP在可互操作的基礎 Web 服務協議棧中的位置。
3.4什麼是WSDL?
WSDL(Web Service Description Language)Web伺服器描述語言是用XML文件來描述Web服務的標準,是Web服務的介面定義語言,由Ariba、Intel、IBM、MS等共同提出,通過WSDL,可描述Web服務的三個基本屬性:
·服務做些什麼——服務所提供的操作(方法)
·如何訪問服務——和服務互動的資料格式以及必要協議
·服務位於何處——協議相關的地址,如URL
WSDL文件以埠集合的形式來描述Web服務,WSDL 服務描述包含對一組操作和訊息的一個抽象定義,繫結到這些操作和訊息的一個具體協議,和這個繫結的一個網路端點規範。
WSDL在Web 服務概念性協議棧中的位置。
WSDL描述語言一般包含三部分
lWhat部分:包括了type、message和portType元素
Type:定義了Web Service使用的資料結構(使用XML Schema定義)
Message:一個Message是SOAP的基本通訊元素。每個Message可以有一個或多個Part,每個Part代表一個引數。
PortType:訊息彙總為不同的操作並歸入到一個被稱為portType的實體中。一個portType代表一個介面(Web Service支援的操作集合),每個Web Service可以有多個介面,它們都使用portType表示。每個操作又包含了input和 output部分。
lHow部分:包含binding元素
binding元素將portType繫結到特定的通訊協議上(如HTTP上的SOAP協議) lWhere部分:由service元素組成 它將portType,binding以及Web Service實際的位置(URI)放在一起描述 3.5什麼是WSDD? WSDD就是WEB服務分佈描述(Web Service Deployment Descriptor), 它定義了WEB服務的介面,如服務名、提供的方法、方法的引數等資訊。 3.6什麼是UDDI? UDDI就是統一描述、發現和整合(Universal Description, Discovery, and Integration)。UDDI用於集中存放和查詢WSDL描述檔案,起著目錄伺服器的作用。 Web 服務中的角色、操作和構件。 服務提供者。從企業的角度看,這是服務的所有者。從體系結構的角度看,這是託管訪問服務的平臺。 服務請求者。從企業的角度看,這是要求滿足特定功能的企業。從體系結構的角度看,這是尋找並呼叫服務,或啟動與服務的互動的應用程式。服務請求者角色可以由瀏覽器來擔當,由人或無使用者介面的程式(例如,另外一個 Web 服務)來控制它。 服務註冊中心。 這是可搜尋的服務描述註冊中心,服務提供者在此釋出他們的服務描述。在靜態繫結開發或動態繫結執行期間,服務請求者查詢服務並獲得服務的繫結資訊(在服務描述中)。對於靜態繫結的服務請求者,服務註冊中心是體系結構中的可選角色,因為服務提供者可以把描述直接傳送給服務請求者。同樣,服務請求者可以從服務註冊中心以外的其它來源得到服務描述,例如本地檔案、FTP 站點、Web 站點、廣告和服務發現(Advertisement and Discovery of Services,ADS)或發現 Web 服務(Discovery of Web Services,DISCO)。 3.7客戶端和伺服器端 3.7.1客戶端 根據wsdl檔案生成的一組相關的客戶端類。然後,通過wsdl地址可以訪問其他系統或應用所提供的功能。 通常Web Service可以有三種類型的客戶 l商業夥伴(Business Partner)--包括分發商,零售商以及大型消費者) 此類客戶通過SOAP、WSDL、ebXML、UDDI等XML技術與Web Service連線 l瘦客戶--包括Web瀏覽器、PDA以及無線裝置 該類客戶通常經由輕量協議(如HTTP)與Web Service連線 l肥客戶--包括Applet、各類應用以及現存系統
通常使用重量級協議(如IIOP)連線Web Service 3.7.2伺服器端 也就是對外提供的一個介面(本質上就是:方法),讓其他不同的系統或應用可以來進行訪問,本系統的功能。它包括的內容: 1.一個對外介面 2.該介面的實現類 3.一個部署描述檔案,描述這個服務(介面)。部署檔案中的服務的資訊,是可以通過axis的命令來生成的。 這些檔案都是將包含在一個完整的web應用中的,當啟動web容器的時候,就可以其他系統進行訪問了。 4Axis概念、命令和方法 4.1什麼是axis? Apache Axis 是Apache WebService專案中的子專案,其最初起源於IBM的"SOAP4J",應該屬於最早的一批用於構造基於SOAP應用的Framework。 目前Apache Axis已經發展到了第三代,其核心是一個SOAP處理器,用於開發包括客戶端,伺服器端,SOAP Gateway等各種應用。事實上Apache Axis在了1.0版後,其發行版本還包括了完整的J2EE伺服器外掛, WSDL支援和生成,TCP/IP監視器等元件,從這個意義上來說Apahce Axis已不僅僅是個SOAP框架了,它包含了除了UDDI外對整個Web Service協議棧(Protocol Stack)的支援。 Axis本質上就是一個SOAP引擎(Apache Axis is an implementation of the SOAP),提供建立伺服器端、客戶端和閘道器SOAP操作的基本框架。但Axis並不完全是一個SOAP引擎,它還包括: 是一個獨立的SOAP伺服器。 是一個嵌入Servlet引擎(例如Tomcat)的伺服器。 支援WSDL。 提供轉化WSDL為Java類的工具。 提供例子程式。 提供TCP/IP資料包監視工具。 4.2什麼時Axis2? A new architecture for Axis was introduced during the August 2004 Summit in Colombo, Sri Lanka. The new architecture on which Axis2 is based on is more flexible, efficient and configurable in comparison to Axis1.x architecture. Some well established concepts from Axis 1.x, like handlers etc., have been preserved in the new architecture. Apache Axis2 not only supports SOAP 1.1 and SOAP 1.2, but it also has integrated support for the widely popular REST style of Web services. The same business logic implementation can offer both a WS-* style interface as well as a REST style interface simultaneously. Apache Axis2 is more efficient, more modular and more XML-oriented than the older version. It is carefully designed to support the easy addition of plug-in "modules" that extend their functionality for features such as security and reliability. The Modules currently available or under development include: Apache Axis2 is built on Apache AXIOM, a new high performant, pull-based XML object model. Axis2 comes with many new features, enhancements and industry specification implementations. The key features offered are as follows: ·Speed - Axis2 uses its own object model and StAX (Streaming API for XML) parsing to achieve significantly greater speed than earlier versions of Apache Axis. ·Low memory foot print- Axis2 was designed ground-up keeping low memory foot print in mind. ·AXIOM - Axis2 comes with its own light-weight object model, AXIOM, for message processing which is extensible, highly performant and is developer convenient. ·Hot Deployment - Axis2 is equipped with the capability of deploying Web services and handlers while the system is up and running. In other words, new services can be added to the system without having to shut down the server. Simply drop the required Web service archive into the services directory in the repository, and the deployment model will automatically deploy the service and make it available for use. ·Asynchronous Web services - Axis2 now supports asynchronous Web services and asynchronous Web services invocation using non-blocking clients and transports. ·MEP Support - Axis2 now comes handy with the flexibility to support Message Exchange Patterns (MEPs) with in-built support for basic MEPs defined in WSDL 2.0. ·Flexibility - The Axis2 architecture gives the developer complete freedom to insert extensions into the engine for custom header processing, system management, and anything else you can imagine. ·Stability - Axis2 defines a set of published interfaces which change relatively slowly compared to the rest of Axis. ·Component-oriented Deployment - You can easily define reusable networks of Handlers to implement common patterns of processing for your applications, or to distribute to partners. ·Transport Framework - We have a clean and simple abstraction for integrating and using Transports (i.e., senders and listeners for SOAP over various protocols such as SMTP, FTP, message-oriented middleware, etc), and the core of the engine is completely transport-independent. ·WSDL support - Axis2 supports the Web Service Description Language, version 1.1 and 2.0, which allows you to easily build stubs to access remote services, and also to automatically export machine-readable descriptions of your deployed services from Axis2. ·Add-ons - Several Web services specifications have been incorporated including WSS4J for security (Apache Rampart), Sandesha for reliable messaging, Kandula which is an encapsulation of WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity. ·Composition and Extensibility - Modules and phases improve support for composability and extensibility. Modules support composability and can also support new WS-* specifications in a simple and clean manner. They are however not hot deployable as they change the overall behavior of the system. 4.3檔案格式介紹 1.JWS (Java Web Service) Files - Instant Deployment 它是格式正確的java檔案,檔案的字尾是.jws。如果釋出,可以直接把它放到釋出的工程根目錄下。它不能指定包名。如果引用其他類,只能其他類也不能指定包名。 4.4Axis工具簡單操作命令和基本概念
http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 然後,進入dos視窗,執行下列命令: java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd 即可生成server-config.wsdd檔案。 如果想釋出新的服務,也可以直接往server-config.wsdd裡面新增service描述。 4.7檢視釋出的webservice 1.首先要檢視工程的web.xml的配置情況,例如:zj114boss的web.xml中對axis的配置是: <servlet> <servlet-name>axis</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> <load-on-startup>5</load-on-startup> </servlet> <servlet-mapping> <servlet-name>axis</servlet-name> <url-pattern>/webservice/*</url-pattern> </servlet-mapping> 3.看詳細的wsdl內容。例如:檢視生產環境http://134.96.71.73/usboss/webservice/ssoService?wsdl 4.8序列化與反序列化 序列化/反序列化器在英文中的對應翻譯是Serializer/Deserializer,一個序列化器的功能是遵循一定的對映規則和編碼風格,將一種型別的JAVA物件通過某種特定的機制,轉換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對出現。Axis中的序列化/反序列化器採用設計正規化中的工廠模式,每一個Serializer唯一對應一個SerializerFactory;每一個Deserializer唯一對應一個DeserializerFactory。 Axis已經為開發者提供了豐富的序列化/反序列化器,對於java的基本資料型別,絕大部分常用的容器類(比如陣列型別,Vector型別等)都提供了實現,特別是提供了對W3C的DOM物件(比如Document, Element等)和符合Bean規範的JAVA物件提供了功能完善的序列化/反序列化器,但對於一些特殊型別的物件,需要通過Web服務進行傳遞,我們不得不開發自己的序列化/反序列化器。 4.9Axis相比Soap v2的優點 Axis是第三代Apache SOAP的實現,從2000年起,SOAP v2開發小組開始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來自W3C的各種XML標準。通過不斷地討論和程式碼編寫,Axis目前相比SOAP V2取得了如下成果: 速度提高。 Axis通過基於事件的SAX對XML文件進行處理,從而在速度和效率上比Apache SOAP有所提高。 靈活性提高。 穩定性提高。 提供面向元件的部署。 提供一個簡潔的傳輸抽象框架。其核心引擎完全於傳輸方式獨立。從而使基於何種協議傳輸的選擇更加靈活。 支援WSDL。包括WSDL和客戶端程式碼生成等。 4.10效能 axis使用1.3版,xfire使用1.0版。xfire使用spring的servicesbean方式釋出web服務。web services客戶端使用delphi 7開發,分別對通過axis釋出的web services及通過xfire釋出的web services進行1萬次連續呼叫(即一次獲取wsdl後連續使用)。axis呼叫1萬次記憶體佔用48M,用時1分40秒 xfire呼叫1萬次記憶體佔用38M,用時1分05秒。使用axis2測試時發現通過axis2釋出的web services 在delphi中可以匯入,但是執行時會報錯。 4.11更多 5開發和測試工具 5.1開發工具 1.採用axis的相關eclipse外掛、或者其他形式的外掛。例如:ObjectWeb Lomboz An Eclipse based IDE for J2EE Development 2.採用axis程式碼本身工具(dos命令列或ant指令碼)來開發。 5.2測試webservice介面工具 1.vb指令碼來測試。這種方式操作比較方便。 2.生成的*testCase.java檔案來進行測試。 6採用eclipse外掛開發 通過這個ObjectWeb Lomboz工具來實現程式碼開發。這個是最簡單的方式。效率非常高,但是對webservice一些基礎知識的理解幫助不大。步驟如下: 1.建一個新的工程。 2.把wsdl檔案放到工程中。 3.點選右鍵,新建一個webservice客戶端或伺服器端程式碼。可以選擇axis、proxy兩種方式來實現。 7採用Axis和Spring進行開發 7.1基本流程 7.1.1簡單的Web Service實現 包含四個基本步驟: ·建立Web Service的商業邏輯(通常是一些Java類)
·將這些Java類部署到一個SOAP伺服器上
·生成客戶訪問程式碼
·部署客戶應用 注意:WSDL等檔案的生成通常是利用廠商提供的工具來完成 7.1.2在Axis下進行開發 This is a sample of the axis! To run the bidbuy sample, you must do the following: 1. Set up your CLASSPATH. 2. Start a server. 3. Deploy the service. 4. Run the sample. 1. Set up your CLASSPATH. (May don’t set it, ) The CLASSPATH must contain: an XML parser (ie., Xerces), JUnit (www.junit.org), all the jars in the lib directory, and the directory containing the samples subdirectory. 2. Start a server. To run the sample, you will first need to run a server. To run a very simple server you could run, in a separate window: java org.apache.axis.transport.http.SimpleAxisServer -p 8080 java -Djava.ext.dirs=lib org.apache.axis.transport.http.SimpleAxisServer -p 8080 3. Deploy the service. To deploy the service, run: java org.apache.axis.client.AdminClient deploy.wsdd java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient samples/bidbuy/deploy.wsdd 4. Run the sample. Finally, to run the client, run: java samples.bidbuy.TestClient java -Djava.ext.dirs=lib samples.bidbuy.TestClient 7.2Axis與Spring的結合 Axis與spring結合,需要提供一些額外工作,即將實現web服務介面的Bean與web服務部署中服務類如何關聯。如下: <service name="GameService" type="" provider="Handler" style="rpc"> <parameter name="handlerClass" value="/blog/com.workingmouse.webservice.axis.SpringBeanRPCProvider"/> <parameter name="springBean" value="gameInfoService"/> <parameter name="springBeanClass" value="/blog/com.gamebase.kernel.service.GameService"/> <parameter name="scope" value="Request"/> <parameter name="allowedMethods" value="*"/> ....... </service> 引數handlerClass的值是處理Bean與wsdd檔案中服務類的關聯。 引數springBean的值表示實現介面GameService註冊的Bean的名字。 引數springBeanClass的值表示介面GameService的類。 7.3Webservice程式碼設計準備 7.3.1版本選擇 根據你的工程的特點,來選擇合適的axis版本。 如果在工程中採用是axis1.2版本的jar檔案,如果生成伺服器端和客戶端時,必須採用合適的axis1.2版本的wsdl2java工具去生成程式碼。否則,有的不能呼叫。 7.3.2軟體下載 7.3.3War檔案部署
Version | Change Time | Author | Description | Effort Hours |
0.1 | 2006-9-26 | 張樂雷 | 這是建立的最初的版本。將記錄開發過程中遇到的各種問題。同時和其他相關的方法、資源等等。 | 0.5 |
0.2 | 2006-11-20 | 張樂雷 | 增加了,客戶端、服務端生成方式、生成步驟、指令碼測試方法 | 0.5 |
V1.0-final | 2006-11-29 | 張樂雷 | 增加了:優秀文章、增加了釋出服務的機制、優化axis工程支援命令和ant生成方式、去掉了代理類的生成、優化了文章結構。 | 2 |
V1.1 | 2006-12-7 | 張樂雷 | 增加webservice訪問方式、啟動服務的命令、cmd格式的檔案、增加wsdd檔案的釋出方式、jws格式描述。 | 0.5 |
V1.2 | 2007-1-2 | 張樂雷 | 引入了日誌跟蹤方式、常見問題解答、修訂了檔案的格式、和97的郵件來往的問題技術交流、附件build.xml程式碼 | 2 |
V1.3 | 2007-1-25 | 張樂雷 | 對文章結構進行調整、引入的外掛生成程式碼的方式、增加文件Roadmap | 0.5 |
V1.4 | 2007-4-9 | 張樂雷 | 增加了工具ObjectWeb Lomboz生成客戶端的方式。 | 0.3 |
V1.5 | 2007-7-11 | 張樂雷 | 增加了:獲得wsdl檔案的方式 | 1 |
V1.6 | 2007-7-26 | 張樂雷 | 刪除:過時的資源;新增一些基本概念解釋、分類、spring整合 | 0.5 |
V1.7 | 2007-8-9 | 張樂雷 | 刪除:文件開發路線圖、增加axis2解釋 | 0.2 |
binding元素將portType繫結到特定的通訊協議上(如HTTP上的SOAP協議) lWhere部分:由service元素組成 它將portType,binding以及Web Service實際的位置(URI)放在一起描述 3.5什麼是WSDD? WSDD就是WEB服務分佈描述(Web Service Deployment Descriptor), 它定義了WEB服務的介面,如服務名、提供的方法、方法的引數等資訊。 3.6什麼是UDDI? UDDI就是統一描述、發現和整合(Universal Description, Discovery, and Integration)。UDDI用於集中存放和查詢WSDL描述檔案,起著目錄伺服器的作用。 Web 服務中的角色、操作和構件。 服務提供者。從企業的角度看,這是服務的所有者。從體系結構的角度看,這是託管訪問服務的平臺。 服務請求者。從企業的角度看,這是要求滿足特定功能的企業。從體系結構的角度看,這是尋找並呼叫服務,或啟動與服務的互動的應用程式。服務請求者角色可以由瀏覽器來擔當,由人或無使用者介面的程式(例如,另外一個 Web 服務)來控制它。 服務註冊中心。 這是可搜尋的服務描述註冊中心,服務提供者在此釋出他們的服務描述。在靜態繫結開發或動態繫結執行期間,服務請求者查詢服務並獲得服務的繫結資訊(在服務描述中)。對於靜態繫結的服務請求者,服務註冊中心是體系結構中的可選角色,因為服務提供者可以把描述直接傳送給服務請求者。同樣,服務請求者可以從服務註冊中心以外的其它來源得到服務描述,例如本地檔案、FTP 站點、Web 站點、廣告和服務發現(Advertisement and Discovery of Services,ADS)或發現 Web 服務(Discovery of Web Services,DISCO)。 3.7客戶端和伺服器端 3.7.1客戶端 根據wsdl檔案生成的一組相關的客戶端類。然後,通過wsdl地址可以訪問其他系統或應用所提供的功能。 通常Web Service可以有三種類型的客戶 l商業夥伴(Business Partner)--包括分發商,零售商以及大型消費者) 此類客戶通過SOAP、WSDL、ebXML、UDDI等XML技術與Web Service連線 l瘦客戶--包括Web瀏覽器、PDA以及無線裝置 該類客戶通常經由輕量協議(如HTTP)與Web Service連線 l肥客戶--包括Applet、各類應用以及現存系統
通常使用重量級協議(如IIOP)連線Web Service 3.7.2伺服器端 也就是對外提供的一個介面(本質上就是:方法),讓其他不同的系統或應用可以來進行訪問,本系統的功能。它包括的內容: 1.一個對外介面 2.該介面的實現類 3.一個部署描述檔案,描述這個服務(介面)。部署檔案中的服務的資訊,是可以通過axis的命令來生成的。 這些檔案都是將包含在一個完整的web應用中的,當啟動web容器的時候,就可以其他系統進行訪問了。 4Axis概念、命令和方法 4.1什麼是axis? Apache Axis 是Apache WebService專案中的子專案,其最初起源於IBM的"SOAP4J",應該屬於最早的一批用於構造基於SOAP應用的Framework。 目前Apache Axis已經發展到了第三代,其核心是一個SOAP處理器,用於開發包括客戶端,伺服器端,SOAP Gateway等各種應用。事實上Apache Axis在了1.0版後,其發行版本還包括了完整的J2EE伺服器外掛, WSDL支援和生成,TCP/IP監視器等元件,從這個意義上來說Apahce Axis已不僅僅是個SOAP框架了,它包含了除了UDDI外對整個Web Service協議棧(Protocol Stack)的支援。 Axis本質上就是一個SOAP引擎(Apache Axis is an implementation of the SOAP),提供建立伺服器端、客戶端和閘道器SOAP操作的基本框架。但Axis並不完全是一個SOAP引擎,它還包括: 是一個獨立的SOAP伺服器。 是一個嵌入Servlet引擎(例如Tomcat)的伺服器。 支援WSDL。 提供轉化WSDL為Java類的工具。 提供例子程式。 提供TCP/IP資料包監視工具。 4.2什麼時Axis2? A new architecture for Axis was introduced during the August 2004 Summit in Colombo, Sri Lanka. The new architecture on which Axis2 is based on is more flexible, efficient and configurable in comparison to Axis1.x architecture. Some well established concepts from Axis 1.x, like handlers etc., have been preserved in the new architecture. Apache Axis2 not only supports SOAP 1.1 and SOAP 1.2, but it also has integrated support for the widely popular REST style of Web services. The same business logic implementation can offer both a WS-* style interface as well as a REST style interface simultaneously. Apache Axis2 is more efficient, more modular and more XML-oriented than the older version. It is carefully designed to support the easy addition of plug-in "modules" that extend their functionality for features such as security and reliability. The Modules currently available or under development include: Apache Axis2 is built on Apache AXIOM, a new high performant, pull-based XML object model. Axis2 comes with many new features, enhancements and industry specification implementations. The key features offered are as follows: ·Speed - Axis2 uses its own object model and StAX (Streaming API for XML) parsing to achieve significantly greater speed than earlier versions of Apache Axis. ·Low memory foot print- Axis2 was designed ground-up keeping low memory foot print in mind. ·AXIOM - Axis2 comes with its own light-weight object model, AXIOM, for message processing which is extensible, highly performant and is developer convenient. ·Hot Deployment - Axis2 is equipped with the capability of deploying Web services and handlers while the system is up and running. In other words, new services can be added to the system without having to shut down the server. Simply drop the required Web service archive into the services directory in the repository, and the deployment model will automatically deploy the service and make it available for use. ·Asynchronous Web services - Axis2 now supports asynchronous Web services and asynchronous Web services invocation using non-blocking clients and transports. ·MEP Support - Axis2 now comes handy with the flexibility to support Message Exchange Patterns (MEPs) with in-built support for basic MEPs defined in WSDL 2.0. ·Flexibility - The Axis2 architecture gives the developer complete freedom to insert extensions into the engine for custom header processing, system management, and anything else you can imagine. ·Stability - Axis2 defines a set of published interfaces which change relatively slowly compared to the rest of Axis. ·Component-oriented Deployment - You can easily define reusable networks of Handlers to implement common patterns of processing for your applications, or to distribute to partners. ·Transport Framework - We have a clean and simple abstraction for integrating and using Transports (i.e., senders and listeners for SOAP over various protocols such as SMTP, FTP, message-oriented middleware, etc), and the core of the engine is completely transport-independent. ·WSDL support - Axis2 supports the Web Service Description Language, version 1.1 and 2.0, which allows you to easily build stubs to access remote services, and also to automatically export machine-readable descriptions of your deployed services from Axis2. ·Add-ons - Several Web services specifications have been incorporated including WSS4J for security (Apache Rampart), Sandesha for reliable messaging, Kandula which is an encapsulation of WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity. ·Composition and Extensibility - Modules and phases improve support for composability and extensibility. Modules support composability and can also support new WS-* specifications in a simple and clean manner. They are however not hot deployable as they change the overall behavior of the system. 4.3檔案格式介紹 1.JWS (Java Web Service) Files - Instant Deployment 它是格式正確的java檔案,檔案的字尾是.jws。如果釋出,可以直接把它放到釋出的工程根目錄下。它不能指定包名。如果引用其他類,只能其他類也不能指定包名。 4.4Axis工具簡單操作命令和基本概念
1.
顯示幫助資訊:java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java
生成客戶端程式碼例項:前提是必須的在dos切換到axis的lib目錄。然後執行這個命令。j java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -a -H -d -s -t -S true -p com.qnuse.zj114.webservice http://134.96.71.58/QnInterface/HzGsyj.asmx?wsdl
2.WSDL2Java工具用於從WSDL檔案生成客戶端存根(stub)程式碼,服務端框架(skeleton)程式碼以及WSDL中的資料型別檔案(生成與之對應的Java程式碼)。
3.server-config.wsdd記錄了axis已釋出的Web服務的描述資訊。
4.5Axis工具wsdl2java命令引數解釋
1.-N, --NStoPkg <argument>=<value>
mapping of namespace to package
2.-a, --all
generate code for all elements, even unreferenced ones
3.-p, --package <argument>
override all namespace to package mappings, use this package
name instead
4.-h, --help
print this message and exit
5. -v, --verbose
print informational messages
6.-t, --testCase
為web service發行junit測試用例類
4.6server-config.wsdd檔案解釋
它是AXIS的配置檔案,所有釋出的服務都會在裡面描述。
如果還沒有server-config.wsdd檔案,可以先寫一個釋出描述檔案,然後用axis來生成,以後需要釋出新的服務,直接往裡面新增即可。
比如有一個HelloWorld.class類,裡面有sayHello(String msg)方法,想把它釋出webservices,先寫釋出檔案deploy.wsdd檔案,即SOAP服務釋出描述檔案deploy.wsddhttp://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 然後,進入dos視窗,執行下列命令: java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd 即可生成server-config.wsdd檔案。 如果想釋出新的服務,也可以直接往server-config.wsdd裡面新增service描述。 4.7檢視釋出的webservice 1.首先要檢視工程的web.xml的配置情況,例如:zj114boss的web.xml中對axis的配置是: <servlet> <servlet-name>axis</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> <load-on-startup>5</load-on-startup> </servlet> <servlet-mapping> <servlet-name>axis</servlet-name> <url-pattern>/webservice/*</url-pattern> </servlet-mapping> 3.看詳細的wsdl內容。例如:檢視生產環境http://134.96.71.73/usboss/webservice/ssoService?wsdl 4.8序列化與反序列化 序列化/反序列化器在英文中的對應翻譯是Serializer/Deserializer,一個序列化器的功能是遵循一定的對映規則和編碼風格,將一種型別的JAVA物件通過某種特定的機制,轉換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對出現。Axis中的序列化/反序列化器採用設計正規化中的工廠模式,每一個Serializer唯一對應一個SerializerFactory;每一個Deserializer唯一對應一個DeserializerFactory。 Axis已經為開發者提供了豐富的序列化/反序列化器,對於java的基本資料型別,絕大部分常用的容器類(比如陣列型別,Vector型別等)都提供了實現,特別是提供了對W3C的DOM物件(比如Document, Element等)和符合Bean規範的JAVA物件提供了功能完善的序列化/反序列化器,但對於一些特殊型別的物件,需要通過Web服務進行傳遞,我們不得不開發自己的序列化/反序列化器。 4.9Axis相比Soap v2的優點 Axis是第三代Apache SOAP的實現,從2000年起,SOAP v2開發小組開始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來自W3C的各種XML標準。通過不斷地討論和程式碼編寫,Axis目前相比SOAP V2取得了如下成果: 速度提高。 Axis通過基於事件的SAX對XML文件進行處理,從而在速度和效率上比Apache SOAP有所提高。 靈活性提高。 穩定性提高。 提供面向元件的部署。 提供一個簡潔的傳輸抽象框架。其核心引擎完全於傳輸方式獨立。從而使基於何種協議傳輸的選擇更加靈活。 支援WSDL。包括WSDL和客戶端程式碼生成等。 4.10效能 axis使用1.3版,xfire使用1.0版。xfire使用spring的servicesbean方式釋出web服務。web services客戶端使用delphi 7開發,分別對通過axis釋出的web services及通過xfire釋出的web services進行1萬次連續呼叫(即一次獲取wsdl後連續使用)。axis呼叫1萬次記憶體佔用48M,用時1分40秒 xfire呼叫1萬次記憶體佔用38M,用時1分05秒。使用axis2測試時發現通過axis2釋出的web services 在delphi中可以匯入,但是執行時會報錯。 4.11更多 5開發和測試工具 5.1開發工具 1.採用axis的相關eclipse外掛、或者其他形式的外掛。例如:ObjectWeb Lomboz An Eclipse based IDE for J2EE Development 2.採用axis程式碼本身工具(dos命令列或ant指令碼)來開發。 5.2測試webservice介面工具 1.vb指令碼來測試。這種方式操作比較方便。 2.生成的*testCase.java檔案來進行測試。 6採用eclipse外掛開發 通過這個ObjectWeb Lomboz工具來實現程式碼開發。這個是最簡單的方式。效率非常高,但是對webservice一些基礎知識的理解幫助不大。步驟如下: 1.建一個新的工程。 2.把wsdl檔案放到工程中。 3.點選右鍵,新建一個webservice客戶端或伺服器端程式碼。可以選擇axis、proxy兩種方式來實現。 7採用Axis和Spring進行開發 7.1基本流程 7.1.1簡單的Web Service實現 包含四個基本步驟: ·建立Web Service的商業邏輯(通常是一些Java類)
·將這些Java類部署到一個SOAP伺服器上
·生成客戶訪問程式碼
·部署客戶應用 注意:WSDL等檔案的生成通常是利用廠商提供的工具來完成 7.1.2在Axis下進行開發 This is a sample of the axis! To run the bidbuy sample, you must do the following: 1. Set up your CLASSPATH. 2. Start a server. 3. Deploy the service. 4. Run the sample. 1. Set up your CLASSPATH. (May don’t set it, ) The CLASSPATH must contain: an XML parser (ie., Xerces), JUnit (www.junit.org), all the jars in the lib directory, and the directory containing the samples subdirectory. 2. Start a server. To run the sample, you will first need to run a server. To run a very simple server you could run, in a separate window: java org.apache.axis.transport.http.SimpleAxisServer -p 8080 java -Djava.ext.dirs=lib org.apache.axis.transport.http.SimpleAxisServer -p 8080 3. Deploy the service. To deploy the service, run: java org.apache.axis.client.AdminClient deploy.wsdd java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient samples/bidbuy/deploy.wsdd 4. Run the sample. Finally, to run the client, run: java samples.bidbuy.TestClient java -Djava.ext.dirs=lib samples.bidbuy.TestClient 7.2Axis與Spring的結合 Axis與spring結合,需要提供一些額外工作,即將實現web服務介面的Bean與web服務部署中服務類如何關聯。如下: <service name="GameService" type="" provider="Handler" style="rpc"> <parameter name="handlerClass" value="/blog/com.workingmouse.webservice.axis.SpringBeanRPCProvider"/> <parameter name="springBean" value="gameInfoService"/> <parameter name="springBeanClass" value="/blog/com.gamebase.kernel.service.GameService"/> <parameter name="scope" value="Request"/> <parameter name="allowedMethods" value="*"/> ....... </service> 引數handlerClass的值是處理Bean與wsdd檔案中服務類的關聯。 引數springBean的值表示實現介面GameService註冊的Bean的名字。 引數springBeanClass的值表示介面GameService的類。 7.3Webservice程式碼設計準備 7.3.1版本選擇 根據你的工程的特點,來選擇合適的axis版本。 如果在工程中採用是axis1.2版本的jar檔案,如果生成伺服器端和客戶端時,必須採用合適的axis1.2版本的wsdl2java工具去生成程式碼。否則,有的不能呼叫。 7.3.2軟體下載 7.3.3War檔案部署