首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

axis定时公布

2012-11-09 
axis定时发布2. 使用定制发布 Web Service Deployment Descriptor(WSDD) ?    即时发布是一项令人激动的技

axis定时发布

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.wsdd(Web 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>

热点排行