我的java天地

axis1 和 axis2 的简单使用

晚上顺便学习了下axis1 和 axis2,发现两者的API相差很大,不知道现在更流行的是哪个,就晚上简单的入门后觉得,axis2还是比axis1开发起来容易上手的多,axis1就单单对服务器发布.wsdd文件就相当麻烦。下面分别就axis1和axis2说下如何集成到自己的项目里:
    一、集成axis1
      1、从官网下载项目http://ws.apache.org/axis/,最新的是1.4
      2、解压下载的axis压缩包,假设AXIS_HOME为解压后的根目录,demo为自己项目的名称
      3、将AXIS_HOME/lib目录下的所有jar包都复制到自己项目的WEB-INF/lib下
      4、将AXIS_HOME/webapps/axis/WEB-INF/web.xml中与axis相关的配置都复制粘贴到自己项目的web.xml中去。
      5、编写需要发布SOAP服务的java类,注意要发布的方法需是public的。以下以Foo.java为例:
Java代码
public class Foo {
     
public String sayHello(String name) 
{
         
return  "hello: " +
 name;
     }

}


      6、接下来就是发布soap服务了,在axis1中有两种发布方式,即时发布和定制发布,下面分别介绍两种发布方式:
      6.1 即时发布:这样方式非常简单,将Foo.java的后缀名改成jws,即java.jws,然后把该文件放在项目里可以在客户端直接访问到的目录下(如WEB-INF就不可以),比如直接放在项目demo的根目录下,通过http://主机名/demo/Foo.jws访问,如果看到Click to see the WSDL就说明发布成功了,点击进去就能看WSDL的描述文件了。接下来就可以写客户端测试代码了:
Java代码
    String path = "http://localhost:8080/demo/Foo.jws";;
    Service service 
= new
 Service();
    Call call 
=
 (Call) service.createCall();
    call.setTargetEndpointAddress(
new
 URL(path));
    call.setOperationName(
new QName(path ,"sayHello"
));
    Object obj 
= call.invoke(new Object[]{"lady gaga"}
);
    System.out.println(obj.toString());

测试代码就不说明了,相信大家能看明白。即时发布方式非常简单、快速,但前提是必须有需要发布soap服务的JAVA类的源文件,如果只有.class或者jar包,那显然就不适用了。
      6.2 定制发布:定制发布相对于即时发布要发杂一些,需要手写wsdd文件来描述web service,但是在牺牲了简单、快速之后,带来的却是灵活性和适用性的大大提高。
       首先在WEB-INF/目录下创建deploy.wsdd文件,文件内容如下:
Xml代码 
<deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java">

    
<service name="foo" provider="java:RPC">
        
<parameter  name="className" value="Foo"/>
        
<parameter  name="allowedMethods" value="sayHello" />
    
</service>
</deployment>

    <deployment>是wsdd文件的根元素。<service>代表一个soap服务,name属性唯一标识这个soap服务,provider表示提供服务的语言和方式,这里是用java语言和RPC方式。
    <paramter>提供<service>更多参数信息,当name值为className时,value值为提供soap服务的JAVA类,当name值为allowedMethods时,value值为允许调用的方法。allowedMethods value等于*,表示MyService的所有方法都可以被调用 
      创建完了deploy.wsdd文件后,我们需要想服务器发布这个soap服务,这需要用到axis提供的一个工具类,打开cmd,进入到WEB-INF/下,执行如下命令:
  • set AXIS_HOME=D:\axis
  • set AXIS_LIB=%AXIS_HOME%\lib
  • set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;   %AXIS_LIB%\commons-logging.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:8080/demo/services/AdminService deploy.wsdd

    以上的三个set命令,设置变量值AXISCLASSPATH为axis相关jar包路径集,java命令就是通过axis提供的工具类AdminClient来发布deploy.wsdd所描述的工具类,执行上面的命令之后(保持服务器是启动状态),会在同一目录下生成server-config.wsdd文件,说明发布成功。可以用6.1即时发布中的客户端测试代码来测试刚发布的soap服务,修改下path的值即可。
Java代码
String path= "http://localhost:8080/demo/Foo";

    二、集成axis2
    之前的准备工作和集成axis1相同,就是axis2所带的jar包非常之多,挑选必须的jar就可以了。
    仍然以Foo类为例,在项目的WEB-INF/目录下建立名为pojo的目录,然后将Foo.class文件放入pojo目录中,这样就发布完成了,可以通过在浏览器输入http://主机名/demo/services/listServices来查看刚才发布的服务。简单吧,这就是axis2带来的无需任何配置,同样适合.class文件的发布方式。下面就是在客户端进行测试:
Java代码 
//调用web service 的 url
        String path = "http://localhost:8080/demo/services/Foo";
        
//使用RPC的方式调用web service

        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options 
=
 serviceClient.getOption();
        EndpointReference target 
= new
 EndpointReference(path);
        options.setTo(target);
        Object[] params 
= new Object[]{"lady gaga"}
;
        Class[] classes 
= new Class[]{String.class}
;
        QName q 
= new QName(path,"sayHello"
);
        Object obj 
= serverClient.invokeBlocking(q,params,classes)[0
];
        System.out.println(obj.toString());

  从上面可以看出来,axis2和axis1API相差还是很大的。

posted on 2010-10-08 16:17 tobyxiong 阅读(2205) 评论(0)  编辑  收藏 所属分类: java


只有注册用户登录后才能发表评论。


网站导航:
 
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(3)

随笔分类(144)

随笔档案(157)

相册

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜