发布service
有2种发布方式,一种是实例发布,一种是描述符发布
实例发布很简单
把我们的java源文件拷贝到axis目录下,改扩展名为jws
然后就可以直接访问了,例如:
java samples.userguide.example2.CalcClient -p8080 add 2 5
他将调用add方法,传递的2个变量分别为2和5。
很显然,第一种方法有很多弊端,比如需要源文件,不能有包路径等等
描述符发布
一个最简单的例子如下:
<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>
一个服务是一个targeted chain ,可能包含下面的一些或者全部:请求Handler,pivot Handler 支点Handler,响应Handler。支点hander在服务中叫做provider,在例子中我们的provider是java:RPC,他被axis内嵌,代表了Java RPC service,具体的类是org.apache.axis.providers.java.RPCProvider.
我们告诉RPCProvider 我们要调用的服务MyService,并以参数的形式告诉他具体的目标以及可以被调用的方法。
我们也可以给我们要调用的对象设置作用范围scope,和servlet的scope一样,有request,session,application.
我们需要把这个描述符定义的内容告诉应用服务器才能真正提供我们需要的服务。
如果已经部署axis到tomcat,我们可以这样发布
org.apache.axis.client.AdminClient deploy.wsdd
这样我们的服务就可以通过soap来访问了
测试一下
java samples.userguide.example3.Client
-lhttp://localhost:8080/axis/services/MyService "test me!"
可以通过下面来查看所有已经部署的服务
java org.apache.axis.client.AdminClient list
来看看更进一步的应用,使用一下request handler
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- define the logging handler configuration -->
<handler name="track" type="java:samples.userguide.example4.LogHandler">
<parameter name="filename" value="MyService.log"/>
</handler>
<!-- define the service, using the log handler we just defined -->
<service name="LogTestService" provider="java:RPC">
<requestFlow>
<handler type="track"/>
</requestFlow>
<parameter name="className" value="samples.userguide.example4.Service"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
这个例子会在客户端掉用LogTestService的时候,先调用samples.userguide.example4.LogHandler作记录操作
远程管理
默认状态下,axis只允许在axis部署的机器上使用管理请求,如果希望在其他的机器上进行管理操作可以参照下面的例子
<service name="AdminService" provider="java:MSG">
<parameter name="className" value="org.apache.axis.util.Admin"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="enableRemoteAdmin" value="true"/>
</service>
注意,这样配置需要作必要的安全配置