Axis1 stub方式配置webService

写个脚本deploy.bat,发布的时候不用用命令行了,也不用加那么多变量到classpath,方便自己.

set AXIS_LIB=D:\axis\axis-1_4\webapps\axis\WEB-INF\lib set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8888/axis/services deploy.wsdd

 

deploy.wsdd文件的内容

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="SayHello" provider="java:RPC"> <parameter name="className" value="SayHello"/> <parameter name="allowedMethods" value="*"/> </service> </deployment>

 

 

再来个复杂点的,带复杂对象映射的

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="PmiService" provider="java:RPC"> <parameter name="className" value="pmi.PmiService"/> <parameter name="allowedMethods" value="*"/> <beanMapping qname="myNS:OpInfo" xmlns:myNS="urn:common:webservice" languageSpecificType="java:wfc.facility.right.common.OpInfo"/> <beanMapping qname="myNS:RoleInfo" xmlns:myNS="urn:common:webservice" languageSpecificType="java:wfc.facility.right.common.RoleInfo"/> <beanMapping qname="myNS:ResourceInfo" xmlns:myNS="urn:common:webservice" languageSpecificType="java:pmi.common.ResourceInfo"/> <beanMapping qname="myNS:Permission" xmlns:myNS="urn:common:webservice" languageSpecificType="java:pmi.webservice.common.Permission"/> </service> </deployment>

 

 我们使用AdminClient来发布,调用格式如下

java org.apache.axis.client.AdminClient -lhttp://地址:端口/context模块/services/SayHello deploy.wsdd

 

 

发现urlservices后的“/SayHello” 没什么用好像,写不写都不影响。(后面发现package路径会多这一级)

运行后如果没错,则会将新的webservice加入到server-config.wsdd配置文件中。

下面来解释AdminClient 所做的工作。AdminClient 首先会在axis.jar所在应用下的WEB-INF文件夹下创建一个webservice配置文件server-config.wsdd,并且根据wsdd文件的配置将我们的webservice加入到这个配置文件中。如果server-config.wsdd已经存在则不会创建,会修改这个文件将新的service 配置到server-config.wsdd文件中。

  下面我们就可以测试该Web服务了,打开浏览器并输入刚刚创建的文件名对应的URL地址http://localhost:8888/axis/services,发现下面已经多了一个我们自己的Webservice"SayHello",点击链接,得到wsdl "http://localhost:8888/axis/services/SayHello?wsdl"

 

得到WSDL文档后,现在进行AXIS客户端的生成。我们前面安装的AXIS环境中已经包含着这样的工具,它是一个JAVA类,类名为:org.apache.axis.wsdl.WSDL2Java。打开命令行窗口,转到刚才TOMCAT webapps\axis 目录下的WEB-INF子目录。确保Tomcat服务已经处于启动状态,键入命令

Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8888/axis/services/SayHello?WSDL //这个地方可以是WSDL文件,也可以是WSDL的路径地址

该命令执行的结果是在当前所在目录(TOMCAT webapps\axis WEB-INF子目录)下产生一个子目录 ,该目录下有四个JAVA源文件,它们分别是:  

SayHello.java //定义了Web服务接口,此例中只有一个hello方法。 SayHelloService.java //定义了用于获取Web服务接口的方法。 SayHelloServiceLocator.java //接口HelloService的具体实现。 SayHelloSoapBindingStub.java //Web服务客户端桩,通过该类与服务器交互。

 

 

 

这四个JAVA类帮我们处理了大部分的逻辑,我们需要的仅仅是把这些类加到我们的项目然后创建一个我们自己的类来调用它们即可。为此我们新加一个类Main.java,为了方便,让这个类与刚产生的四个类都在同一个包下。内容如下:

 

public class WebServiceClientTest { public static void main(String[] args){ SayHelloService service = new SayHelloServiceLocator(); try { SayHello hello = service.getSayHello(); System.out.println("Response:"+hello.hello()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

 

 由于Axis1.x需要注意的地方太多,这样有点繁琐,改日研究Axis2以及Xfire等方式吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值