以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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。