這種發布方式非常的敏捷!但有它的局限性—你必須知道webservice的源代碼。有時候這個的確很讓人郁悶!比如:的webservice被打成了一個jar包,你并沒有源代碼。或者這個webservice根本就不是你的公司開發的。這時你發布這個webservice就會變得很困難。axis針對這種情況提供了wsdd文件的方式來發布和撤銷webservice。
現在我們來通過一個wsdd文件來對wsdd有個初步的認識。注意:在開始下面的步驟前請安裝axis.具體安裝請看上一篇
- <deployment xmlns="http://xml.apache.org/axis/wsdd/"
- xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <service name="MyService" provider="java:RPC">
- <parameter name="className" value="samples.userguide.example3.MyService"/>
- <parameter name="allowedMethods" value="*"/>
- service>
- deployment>
最外面的元素告訴我們這是一個wsdd發布項,并且定義了java的命名空間,service 元素定義了我們的service.java:RPC定義了axis的provider。parameter name定義了webservice類名及所在包的位置。allowedMethods value等于*,表示MyService的所有方法都可以被調用。
了解了wsdd文件,我們來認識一個非常有用的工具AdminClient.正式通過它我們才能通過wsdd文件發布我們的應用。它的全路徑是org.apache.axis.client.AdminClient,在axis.jar包中。在使用這個工具前我們必須把相應的jar包加入classpath。如:axis.jar..。如果你做了<>的練習則這一步就不用再做了。
我們首先進入webservice所在源文件的目錄找到deploy.wsdd文件。然后鍵入如下命令:
java org.apache.axis.client.AdminClient deploy.wsdd
(如果提示錯誤,請檢查你是否將必須的jar包加入classpath)
如果成功則會顯示 :
- <Admin>Done processingAdmin>
下面來解釋AdminClient 所做的工作。AdminClient 首先會在axis.jar所在應用下的WEB-INF文件夾下創建一個webservice配置文件server-config.wsdd,并且根據wsdd文件的配置將我們的webservice加入到這個配置文件中。如果server-config.wsdd已經存在則不會創建,會修改這個文件將新的service 配置到server-config.wsdd文件中。
如圖:
- xml version="1.0" encoding="UTF-8"?>
- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <globalConfiguration>
- <parameter name="sendMultiRefs" value="true"/>
- <parameter name="disablePrettyXML" value="true"/>
- <parameter name="adminPassword" value="admin"/>
- <parameter name="attachments.Directory" value="C:\tomcat5\webapps\axis\WEB-INF\attachments"/>
- <parameter name="dotNetSoapEncFix" value="true"/>
- <parameter name="enableNamespacePrefixOptimization" value="false"/>
- <parameter name="sendXMLDeclaration" value="true"/>
- <parameter name="sendXsiTypes" value="true"/>
- <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
- <requestFlow>
- <handler type="java:org.apache.axis.handlers.JWSHandler">
- <parameter name="scope" value="session"/>
- handler>
- <handler type="java:org.apache.axis.handlers.JWSHandler">
- <parameter name="scope" value="request"/>
- <parameter name="extension" value=".jwr"/>
- handler>
- requestFlow>
- globalConfiguration>
- <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="MyService" provider="java:RPC">
- <parameter name="allowedMethods" value="*"/>
- <parameter name="className" value="samples.userguide.example3.MyService"/>
- service>
- <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>
- deployment>
我們來訪問一下看看:
java samples.userguide.example3.Client -lhttp://localhost:8080/axis/services/MyService "test me!"
You typed : test me!
返回正確,部署成功!
如果你要卸載一個webservice也很簡單!我們首先定義一個undeploy.wsdd
- <undeployment xmlns="http://xml.apache.org/axis/wsdd/">
- <service name="MyService"/>
- undeployment>
進入webservice所在源文件的目錄找到undeploy.wsdd文件。然后鍵入如下命令:
java org.apache.axis.client.AdminClient undeploy.wsdd
(如果提示錯誤,請檢查你是否將必須的jar包加入classpath)
如果成功則會顯示 :
- <Admin>Done processingAdmin>
在看server-config.wsdd已經刪除了原來service的定義
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <globalConfiguration>
- <parameter name="sendMultiRefs" value="true"/>
- <parameter name="disablePrettyXML" value="true"/>
- <parameter name="adminPassword" value="admin"/>
- <parameter name="attachments.Directory" value="C:\tomcat5\webapps\axis\WEB-INF\attachments"/>
- <parameter name="dotNetSoapEncFix" value="true"/>
- <parameter name="enableNamespacePrefixOptimization" value="false"/>
- <parameter name="sendXMLDeclaration" value="true"/>
- <parameter name="sendXsiTypes" value="true"/>
- <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
- <requestFlow>
- <handler type="java:org.apache.axis.handlers.JWSHandler">
- <parameter name="scope" value="session"/>
- </handler>
- <handler type="java:org.apache.axis.handlers.JWSHandler">
- <parameter name="scope" value="request"/>
- <parameter name="extension" value=".jwr"/>
- </handler>
- </requestFlow>
- </globalConfiguration>
- <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的定義已經刪除!
- -->
- <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>
- </deployment>
看是不是很簡單,不僅省去了ctrl+c和ctrl+v,還防止了手動配置出錯。一舉兩得豈不快哉!
安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢】