?转载自:http://yangyang.javaeye.com/blog/56552
?
在上一篇<>中我介绍了一种简单webservice的发布方式-jws。
???? 这种发布方式非常的敏捷!但有它的局限性—你必须知道webservice的源代码。有时候这个的确很让人郁闷!比如:的webservice被打成了一个jar包,你并没有源代码。或者这个webservice根本就不是你的公司开发的。这时你发布这个webservice就会变得很困难。axis针对这种情况提供了wsdd文件的方式来发布和撤销webservice。
???? 现在我们来通过一个wsdd文件来对wsdd有个初步的认识。注意:在开始下面的步骤前请安装axis.具体安装请看上一篇
xml 代码
-
<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 代码
-
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>??
xml 代码
?我们来访问一下看看:
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>??
xml 代码
进入webservice所在源文件的目录找到undeploy.wsdd文件。然后键入如下命令:
????????????? java org.apache.axis.client.AdminClient? undeploy.wsdd
?(如果提示错误,请检查你是否将必须的jar包加入classpath)
????????
???????? 如果成功则会显示 :?
- <Admin>Done?processingAdmin>??
?
在看server-config.wsdd已经删除了原来service的定义
xml 代码
-
<?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>??
-
?
-
?
-
??
-
?<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,还防止了手动配置出错。一举两得岂不快哉!