当前位置 : 主页 > 网页制作 > Nodejs >

Axis2开发webservice案例详解

来源:互联网 收集:自由互联 发布时间:2021-06-24
最近公司在一个项目上与另外一家公司做接口集成,需要webservice来处理数据的传递,本来我用的CXF简单配置下就可以发布了(关于CXF发布webservice的过程,在后面的博客中也会给个案例

最近公司在一个项目上与另外一家公司做接口集成,需要webservice来处理数据的传递,本来我用的CXF简单配置下就可以发布了(关于CXF发布webservice的过程,在后面的博客中也会给个案例,欢迎扔板儿砖!~_~),但是对方用的是axis,本来以为用wsimport解析下wsdl文件就可以生成客户端程序,然后就可以调用了,后来才发现,解析不了~_~,没办法只能研究下怎么通过axis发布webservice吧!

环境准备:


  1. eclipse3.7.2
  2. apache-tomcat-6.0.36
    我的目录是:E:\Program Files (x86)\apache-tomcat-6.0.36;一下的tomcat路径都将会沿用这个目录,有时也会用%TOMCAT_HOME%代替
  3. axis1.4

先展示下效果,首先启动tomcat(startup.bat[windows版本]),然后在浏览器上输入:http://localhost:8080/axis/services,截图如下:
,好了,这里你可以看到有四个无序列表,而且每个后面都还有wsdl链接,简单说下:拿第一个来说


  1. 这个是服务名称,先记着,后面会说明。

  2. 这个是wsdl描述文件的链接,点进去看下~_~

    3.
    好了,介绍完后,开始我们第一个webservice服务的发布吧!!!

你会注意到几乎每个java案例都会从HelloWorld开始,这里惯例,我们也遵守下吧~_~

环境部署:axis的部署
解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。
PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,jdk安装目录的lib下就能找的到。
现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。


HelloWorld.java

package com.burns;

public class HelloWorld {
    public HelloWorld() {

    }

    public String hello(String str) {
        return "Hello " + str;
    }

    public int add(int a, int b) {
        return a + b;
    }
}

如果这里你是在eclipse做的话,设置eclipse自动编译,就能获取class文件。
class文件如图:

这样一个HelloWorld.class文件就获取到了,然后连包带class文件一起拷贝到E:\Program Files (x86)\apache-tomcat-6.0.36\webapps\axis\WEB-INF\classes下,即HelloWorld.class的完整路径为:E:\Program Files (x86)\apache-tomcat-6.0.36\webapps\axis\WEB-INF\classes\com\burns\HelloWorld.class,

接下来开始编写发布文件:deploy.wsdd , 在E:\Program Files (x86)\apache-tomcat-6.0.36\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<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.burns.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 -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

之后控制台返回Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个server-config.wsdd文件 )在这里的AdminClient是AXIS提供的一个客户端管理工具。至于java.ext.dirs的含义可以去了解一下classloader和JVM类装载机制方面的知识,在这里就不多解释。 还有一点要注意的是在发布的时候Tomcat服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。发布成功之后你可以通过访问 http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。

点击HelloWorld的wsdl链接,显示如下:

config.wsdd文件如下:

好了,至此,我们的axis发布的webservice服务器端已经完成。
下面编写客户端测试发布的服务:
HelloWorldTest.java

package com.burns;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloWorldTest {

    public static void main(String[] args) {
        try {
            String targetEendPoint =  "http://localhost:8080/axis/services/HelloWorld" ; 
            Service service =  new  Service(); 
            Call call = (Call) service.createCall(); 
            call.setTargetEndpointAddress( new  URL(targetEendPoint)); 

            call.setOperationName( new  QName(targetEendPoint,  "hello" )); 
            String result = (String) call.invoke( new  Object[]{ "Robert" }); 
            System.out.println(result); 

            call.setOperationName( new  QName(targetEendPoint,  "add" )); 
            Integer res = (Integer) call.invoke( new  Object[]{ new  Integer( 1 ),  new  Integer( 2 )}); 
            System.out.println( "The result is: "  + res);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ServiceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
    }
}

测试结果:

Hello Robert
The result is: 3

网上也发现一些不错的资源,粘贴如下:
利用AXIS开发Webservice(一) —— 如何发布自己的webservice
Axis1.x WebService开发指南

网友评论