使用axis配置webservice 方法
?以tomcat为例,网上找个axis-bin-1_4.zip 找到%TOMCAT_HOME%为tomcat安装目录 ? ? 1解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到%TOMCAT_HOME%/webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%/webapps/axis/WEB-INF/lib目录下(还需要把解压出来的文件夹里的lib目录下的jar包也引入,不然写程序的时候会没工具类导入)。启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp如果访问成功,表明基本的配置你已经做完。 ? ? 2现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。 ? ? 一、即时发布: ? 即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是 java web service的缩写)拷贝到%TOMCAT_HOME%/webapps/axis目录下即完成了所有的发布工作。AXIS的编译引擎会处理接下来的所有事情。下面是一段示例代码: ? java 代码 public class HelloAXIS { public String Hello(String name){ return "AXIS say hello to " + name; } } ? ???????把HelloAXIS.java 文件改成HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%/webapps/axis目录下,启动Tomcat之后访问http://localhost:8080/axis/HelloAXIS.jws 如果能看到 Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。server端的发布已经完成了,接下来就是编写Client端测试代码了。 ? java 代码 package com.yourcompany.Test; import java.net.URL; import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class Test { public static void main(String[] args) throws Exception{ String targetEendPoint ="http://localhost:8080/axis/HelloAXIS.jws"; Service service = new Service(); Call call = (Call) service.createCall(); call.setOperationName(new QName(targetEendPoint,"Hello")); call.setTargetEndpointAddress(new URL(targetEendPoint)); String result = (String) call.invoke(newObject[]{"Robert"}); System.out.println(result); } } ? 4定制发布: ? 比起即时发布定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个WSDD(Web ServiceDeployment Descriptor)文件,这个东东类似与XML稍后会做出介绍。废话不多说,我们来看代码: ? ? ? java 代码 package com.chnic.webservice; public class HelloWorld { public HelloWorld(){ } public String hello(String str){ return "Hello " + str; } public int add(int a,int b){ return a + b; } } ? 一个带包的很简单的类,在eclipse下编译后按照包名拷到 %TOMCAT_HOME%/webapps/axis/WEB-INF/classes目录下。以这个类为例,拷贝完之?? 后这个HelloWorld.class的路径就是 ?%TOMCAT_HOME%/webapps/axis/WEB-INF/classes/com/chnic/webservice。PS:如果嫌这样太麻烦,可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后,整体一次性拷贝到websericve的工程中。 ? ?? 接下来就需要编写发布文件deploy.wsdd。到%TOMCAT_HOME%/webapps/axis/WEB-INF目录下建立这个文件并在其中添加如下内容: ? ? <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="HelloWorld"provider="java:RPC"> <parameter name="className" value="com.chnic.webservice.HelloWorld"/> <parameter name="allowedMethods"value="*"/> </service> </deployment> ? 简单的介绍下各个节点的含义: "HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有4种类型,分别是:RPC,Document,Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。 ? ? 编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCAT_HOME%/webapps/axis/WEB-INF目录下键入如下命令 ? java org.apache.axis.client.AdminClientdeploy.wsdd ? 或者 javaorg.apache.axis.client.AdminClient –l http://localhost:8088/axis/services/HelloWorld? deploy.wsdd ? 控制台显示<Admin>Done?processingAdmin>?说明配置成功 ? 在此,需要将需要的jar包加入classpath中 ? 创建环境变量,设置AXIS的环境变量. 这种方式的编码,先要设置一下命令行的环境.右键我的电脑――>属性――> 选择高级选项卡――>新建用户变量――>输入用户变量如下: ?变量名:AXIS_LIB ?? 变量值: E:/tomcat5.28/Tomcat5.0/webapps/axis/WEB-INF/lib 变量名:CLASSPATH 变量值:.;%AXIS_LIB%/axis.jar; %AXIS_LIB%/activation.jar; %AXIS_LIB%/axis-ant.jar; %AXIS_LIB%/commons-discovery-0.2.jar; %AXIS_LIB%/commons-logging-1.0.4.jar; %AXIS_LIB%/jaxrpc.jar; %AXIS_LIB%/log4j-1.2.8.jar; %AXIS_LIB%/mail.jar; %AXIS_LIB%/saaj.jar; %AXIS_LIB%/wsdl4j-1.5.1.jar; %AXIS_LIB%/xmlsec-1.4.0.jar; %AXIS_LIB%/dom4j-1.6.1.jar; 变量名:AXIS_HOME 变量值:E:/tomcat5.28/Tomcat5.0/webapps/axis ? ? 发布成功之后你可以通过访问http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务 ? 客户端测试代码 String targetEendPoint ="http://localhost:8080/axis/services/HelloWorld"; Service service = new Service(); Call call = (Call)service.createCall(); call.setTargetEndpointAddress(newURL(targetEendPoint)); call.setOperationName(newQName(targetEendPoint,"hello")); String result = (String) call.invoke(newObject[]{"Robert"}); System.out.println(result); call.setOperationName(newQName(targetEendPoint,"add")); Integer res = (Integer) call.invoke(newObject[]{new Integer(1),new Integer(2)}); System.out.println("The result is:" + res); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |