Axis 1.4 使用指南

根据wsdl开成webservice的java客户 例子:
1、执行以下命令生成客户端代码
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl  
该命令的参数格式
从最简单的开始  , -uri 指定wsdl文件
> WSDL2Java -uri currencyConvert.wsdl

-d 使用不同的data binding方法
> WSDL2Java -uri currencyConvert.wsdl -d xmlbeans

-a 生成异步的方法
> WSDL2Java -uri currencyConvert.wsdl -a

-t 生成测试case
> WSDL2Java -uri currencyConvert.wsdl -t 

稍微复杂一些的,-p可以指定生成的package,-o指定生成的路径,-ss生成服务端代码

wsdl2java -uri ../wsdl/currencyConvert.wsdl -o ../gen_src  -ss -sd -g -p foo.bat



 实验室想把原来做的一些东西打包成web服务的形式供别人调用,因此趁此机会学习了下axis1.4。现在把学习过程中碰到的一些问题记录下来。

1.axis简介:

          Axis(Apache eXtensible Interaction System)是一款开源的WebService 运行引擎,它是SOAP 协议的一个实现,其本身来源于Apache 的另一个项目Apache SOAP。Axis 分为1.x系列和2 系列,两个系列体系结构和使用上有较大的区别,相对而言,Axis1.x 更加稳定,文档也比较齐全,因此本文内容以Axis 1.x 系列最新版本1.4 为基础。

2.axis的安装配置:

      可以从官方网页http://ws.apache.org/axis/index.html下载到1.x系列的最终版1.4,建议大家把axis-bin-1_4.zip  和axis-src-1_4.zip 都下下来。

2.1安装到本地:

     安装到本地主要是为了应用axis自带的一些小工具。很简单把axis-bin-1_4.zip解压到某个目录即可,我电脑里是D:\JavaTools\axis-1_4,这个目录就是所谓的axis安装目录.

为了这些工具的方便使用,需要设置些环境变量:

AXIS_HOME:D:\JavaTools\axis-1_4

AXIS_LIB:%AXIS_HOME%\lib

AXISCLASSPATH:%AXIS_LIB%\axis.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%\wsdl4j-1.5.1.jar;

前两个我用到了,后面那个一直没用到  

2.2安装到Tomcat中:

axis要运行必须有web容器,我使用的是Tomcat。很简单,

1)在axis安装目录中找到webapps文件,打开,然后把里面的axis文件夹及其内容复制到Tomcat的webapps目录下,在我电脑里即有这么个目录D:\JavaTools\Tomcat 6.0\webapps\axis

2)检验是否安装成功:首先启动Tomcat,然后在浏览器里输入http://127.0.0.1:8080/axis/,如果看到下面这个图则说明在Tomcat下安装成功了

 

注意,axis安装包中少几个jar包,需要单独下载:

必需组件:

http://java.sun.com/products/javabeans/glasgow/jaf.html

可选组件:

http://java.sun.com/products/javamail/

http://xml.apache.org/security/

分别下载:jaf-1_1-fr.zip,javamail-1_4.zip,xml-security-bin-1_2_1.zip包,然后把jaf-1_1-fr.zip里的Activation.jar,javamail-1_4.zip里的mail.jar,xml-security-bin-1_2_1.zip里的xmlsec-1.2.1.jar,xalan.jar都放到你的axis应用的WEB-INF/lib下然后在校验Axis,看到页面提示全部安装成功。

 

2.3安装到Eclipse

如果你在项目中要用到axis,则你的项目应该包含axis的一些包。这里主要是在客户端编程中要用到。

         首先创建一个WEB项目,名称随便,    再把axis安装目录中的lib目录下的所有jar包都导入该项目,这样eclipse中的axis就安装好了,开发webservice就只要在这个项目里开发就行了,如果你在其他项目里开发的话,只要把jar都导过去就行了,简单吧!

安装就讲这么多。。基本上就没什么问题了。

3.开发web service

axis中发布服务主要有两种方式

  • 即时发布JWS
  • 定制发布WSDD

 

即时发布虽然很方便,但限制过大,一般不会用。最大限制就是不支持带包的类,这是初学者容易犯的一个错。具体就不讲了,下面通过讲解如何把我们项目的一个算法发布成web service来详细讲解定制发布。


3. 定制发布WSDD

        web服务的开发主要分两部分,一部分是服务的提供者,主要要做两件事情,一是完成服务的业务逻辑,也就是完成这个服务真正要做的事,二是完成服务的配制,也就是如何描述你的服务,以使别人能够调用,这一步是重点。另一部分就是服务的使用者,也就是客户端如何调用发布好的服务。因此在学习axis的过程中,一定要分清哪些事是服务器端要做的事,哪些事是客户端要做的事,而网上大部分资料为了讲述方便都放一起讲,让初学者迷惑不已。下面我就分别从这两部分来详细讲述。

       首先还是讲述下任务吧,我们的项目SN中有很多好而且实用的算法,这些算法还总要调用服务器中的数据库读取数据,这个项目是BS模式的,现在还需要开发一个CS模式的系统,很多要做的事BS模式中已经做完了,因此,很自然的想法就是直接复用这些算法。一开始是导入jar包的形式,后来发现这样很累,不但jar包很大,更重要的是BS一改,CS就得重导jar包。耦合性太紧。因此就有了把这些算法以web service的形式发布出去的 想法,让CS程序以web 服务的形式调用这些算法!这些天做的事情就是这些,下面以一个具体的算法如何发布出去为例讲述axis中服务的定制发布。

具体任务:SemanticQueryOperate这个类中有一个方法getAdvancedSearchList()用于高级搜索,通过语义匹配从数据库中找到相应的服务。

类加上包名为:cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate

方法:public List<Serviceinfo> getAdvancedSearchList(AdvanceSearch advanceSearch),其中AdvanceSearch 是一个javabean,用于封装用户的查询条件,Serviceinfo也是一个javabean,用于封装服务信息。

任务就是把这个方法接口发布出去。

    

3.1 Web Service服务端开发

对于服务端,第一件事已经做好了,即已经把业务相关的代码写好了。。下面要做的事就是把这个服务发布出去,也就是如何写描述文件wsdd。

具体语法就不讲了,直接看写好的:snAdvancedSearch.wsdd

Java代码

  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"  
  2.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">   
  3.     <service name="SN_AdvanceSearch" provider="java:RPC">   
  4.         <parameter name="className" value="cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate"/>   
  5.         <parameter name="allowedMethods" value="getAdvancedSearchList"/>   
  6.         <beanMapping qname="myNSD:AdvanceSearch"     xmlns:myNSD="urn:BeanService"  
  7.             languageSpecificType="java:cn.edu.tju.ikse.sn.advancedSearch.AdvanceSearch"/>   
  8.         <beanMapping qname="myNSD:Serviceinfo"  xmlns:myNSD="urn:BeanService"  
  9.             languageSpecificType="java:cn.edu.tju.ikse.sn.hibernate.Serviceinfo"/>   
  10.     </service>   
  11. </deployment>  

 

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="SN_AdvanceSearch" provider="java:RPC">

  <parameter name="className" value="cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate"/>

  <parameter name="allowedMethods" value="getAdvancedSearchList"/>

  <beanMapping qname="myNSD:AdvanceSearch" xmlns:myNSD="urn:BeanService"

   languageSpecificType="java:cn.edu.tju.ikse.sn.advancedSearch.AdvanceSearch"/>

  <beanMapping qname="myNSD:Serviceinfo"  xmlns:myNSD="urn:BeanService"

   languageSpecificType="java:cn.edu.tju.ikse.sn.hibernate.Serviceinfo"/>

</service>

</deployment>

 

第三行,就是给这个服务取一个名字,这样别人就能按照名字来获取服务了。这里我们取名为SN_AdvanceSearch

第四行,指定这个服务代表的具体类,要包括包名

第五行,指定这个服务允许别人访问的方法名,这里只让访问getAdvancedSearchList,如果改成*号,则这个类所有    public的方法都能被客户端调用。

第六行,是重点,完成类型的映射,因为用到了用户自己定义的两个javaBean,因此需要映射。格式如第六行和第七行所示,qname="myNSD:AdvanceSearch" ,注意红色部分应该和你的javabean名一致,languageSpecificType也得注意下格式,java:表示这是一个java语言写的类,后面再加上具体的类。其它自定义类完全可以参考这个写法。

写完后我把这文档放在了D:\JavaTools\Tomcat 6.0\webapps\axis\WEB-INF目录下,下一步是如何把这个wsdd文档加到axis自己的配制文档server-config.wsdd里。

编写完配置发布文件之后,cmd打开windows的控制台,进入:%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下键入如下命令:

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient snAdvancedSearch.wsdd

之后控制台返回Processing file deploy.wsdd 和Done processing 这两段话即说明发布成功。(注意tomcat得开着)。

当然了为了操作方便也可以写个批处理文件wsdd.bat:

 

Java代码

  1. set Axis_Lib=D:\JavaTools\axis-1_4\lib       
  2. set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%       
  3. set Axis_Servlet=http://localhost:8080/axis/servlet/AxisServlet       
  4. %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% snAdvancedSearch.wsdd    
  5. pause  

 

set Axis_Lib=D:\JavaTools\axis-1_4\lib   

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%   

set Axis_Servlet=http://localhost:8080/axis/servlet/AxisServlet   

%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% snAdvancedSearch.wsdd

pause

  

最终效果都是一样的,此时在server-config.wsdd会有如下代码段:

Java代码

  1. <service name="SN_AdvanceSearch" provider="java:RPC">   
  2.  <parameter name="allowedMethods" value="getAdvancedSearchList"/>   
  3.  <parameter name="className" value="cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate"/>   
  4.  <beanMapping languageSpecificType="java:cn.edu.tju.ikse.sn.advancedSearch.AdvanceSearch" qname="ns2:AdvanceSearch" xmlns:ns2="urn:BeanService"/>   
  5.  <beanMapping languageSpecificType="java:cn.edu.tju.ikse.sn.hibernate.Serviceinfo" qname="ns3:Serviceinfo" xmlns:ns3="urn:BeanService"/>   
  6. </service>  

 

 <service name="SN_AdvanceSearch" provider="java:RPC">

  <parameter name="allowedMethods" value="getAdvancedSearchList"/>

  <parameter name="className" value="cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate"/>

  <beanMapping languageSpecificType="java:cn.edu.tju.ikse.sn.advancedSearch.AdvanceSearch" qname="ns2:AdvanceSearch" xmlns:ns2="urn:BeanService"/>

  <beanMapping languageSpecificType="java:cn.edu.tju.ikse.sn.hibernate.Serviceinfo" qname="ns3:Serviceinfo" xmlns:ns3="urn:BeanService"/>

 </service>

 

和原来的wsdd文件差不多。对着看就明白了。。如果熟悉了可以直接在server-config.wsdd中加上上面这段代码就行了。此时访问http://localhost:8080/axis/servlet/AxisServlet就能看到你发布的服务了,可以查看对应的wsdl文档。

服务端任务基本就完成了。。最后别忘记把服务端对应的class文件拷到D:\JavaTools\Tomcat 6.0\webapps\axis\WEB-INF\classes目录下。由于我们这是一个web工程也是发布在Tomcat中,我是直接把发布的工程中的WEB-INF下的classes文件夹全部拷到axis下对应目录。(似乎还要把lib下的jar包也拷到axis对应的lib目录下)


你可能感兴趣的:(Axis 1.4 使用指南)