扎哈哈迪德素描画像:axis WSDL2Java 学习笔记,感兴趣的看一下

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 07:54:19

 

到公司的第一个任务就是要根据wsdl文件来实现它描述的webservice。这两天恶补了很多相关的东西,比如axis的使用。貌似这个任务跟我们在学校学习的通过xfire来发布webservice是个相反的过程。一个是实现了方法来发布wsdl,一个是根据wsdl来实现方法。whatever,现在我已经基本会用了axis这个可爱的包了。

不管你是wsdl到java,还是java到wsdl。下面写下这个笔记,以共享,希望能给用的着的同学带来些许帮助。我再说说的我的任务吧。上面给了一个xxx.wsdl文件,老大说:“小张啊,里面有两个接口你给实现了。”那么我们现在有的就是xxx.wsdl,当然还有需求分析,任务就是实现它里面描述的方法,我想没有人愿意去读那个xml文档吧,(感慨一下张淼老师的功力深厚,那么多的标签他都能记的那么清楚,学习的楷模!!),公司里的老大哥告诉我可以使用axis来生成服务端代码然后再开发实现。以下就是过程了。

使用axis我们先来配置相应的环境,我来转载一篇文章介绍环境的配置,我是根据他的路子走的,配置成功并且可以运行,版本不同应该不会有太大的问题,我的各个版本就跟他不一样,目前没有出现问题。非常的感谢这位老兄。
1.Axis:axis-1_3(axis-bin-1_3.zip)
2.Tomcat:jakarta-tomcat-5.0.28(jakarta-tomcat-5.0.28.exe)
3.JDK:jdk1.5.0_06 (jdk-1_5_0_06-windows-i586-p.exe)
4.JRE:jre1.5.0_06 (jdk-1_5_0_06-windows-i586-p.exe)
先去SUN和Apache网站把上述软件找好,版本最好一致,开源软件的版本兼容性不佳,所以不一致的话我不能保证下述的方法可行,接下来从最基本的开始:
一.安装Java环境
通过jdk-1_5_0_06-windows-i586-p.exe(前几天在SUN网站上看到现在最新的好像是是jdk-1_5_0_10-windows-i586-p.exe,嗯,如果用这个的话应该也可以)安装jdk1.5.0_06和jre1.5.0_06,注意首先会安装JDK,然后接着会安装JRE,必须分别给它们选两个不同的路径来装,如C:\jdk1.5.0_06和C:\jre1.5.0_06。
二.安装Tomcat
通过jakarta-tomcat-5.0.28.exe(最新都出Tomcat 6.0.2-beta了,不知道行不行)安装Tomcat 5.0.28,记得是要选择安装路径、系统JRE路径、管理员用户名和密码、Tomcat端口号等等,例如:C:\Tomcat5.0、C:\jre1.5.0_06、admin和admin、8080(端口别被别的软件占用,否则换一个)。
三.将Axis集成到Tomcat
先不要启动Tomcat服务,解压axis-bin-1_3.zip,将\axis-bin-1_3\axis-1_3\webapps目录下的axis整个文件夹拷贝到Tomcat安装路径(例如C:\Tomcat5.0)下的webapps文件夹下。再把Tomcat安装路径(例如C:\Tomcat5.0)下刚拷贝的axis目录下的WEB-INF\lib目录下的所有文件拷贝到Tomcat的安装路径下的common\lib目录中。在jdk1.5.0_06的lib目录(例如C:\jdk1.5.0_06\lib)下有一个tools.jar文件,把它拷到Tomcat安装目录(例如C:\Tomcat5.0)下的common\lib目录下。
四.配置系统环境变量
通过我的电脑——属性——高级——环境变量在下面的系统变量中添加如下一些项:
1.变量名TOMCAT_HOME
变量值C:\Tomcat5.0
2. 变量名AXIS_HOME
变量值%TOMCAT_HOME%\webapps\axis
3. 变量名AXIS_LIB
变量值%AXIS_HOME%\WEB-INF\lib
4. 变量名AXISCLASSPATH
变量值%AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\axis-schema.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%\saaj.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar; %AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\xmlsec-1.3.0.jar;
5.变量名CLASSPATH
变量值%AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\axis-schema.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%\saaj.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar; %AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\xmlsec-1.3.0.jar;
6.变量名JAVA_HOME
变量值C:\jdk1.5.0_06\bin
注意保证以上变量值中提及的相应文件都在相应目录。特别的是,在axis-bin-1_3.zip中不包括activation.jar、mail.jar和xmlsec-1.3.0.jar这3个文件,需要去SUN和Apache主页单独下载,分别是jaf-1_0_2-upd2.zip、javamail-1_4.zip和xml-security-bin-1_3_0.zip。(版本不同不知道行不行)
五.检查是否安装成功
启动Tomcat服务,使用web浏览器访问http://localhost:8080/axis/,可以看到Hello! Welcome to Apache-Axis.的提示信息,再单击Validation链接转到http://localhost:8080/axis/happyaxis.jsp,如果看到提示The core axis libraries are present.The optional components are present. 就表示安装Axis成功了。否则根据提示提供的链接,下载对应的文件,拷贝到Tomcat目录下Webapps里面的axis文件夹下的WEB-INF下的lib目录中,同时Tomcat安装路径下的common目录下的lib中也要拷贝,再重新访问http://localhost:8080/axis/happyaxis.jsp,直到提示The core axis libraries are present.The optional components are present.表示安装Axis成功!(怎么还有一句Note: Even if everything this page probes for is present, there is no guarantee your web service will work, because there are many configuration options that we do not check for. These tests are necessary but not sufficient啊!)



好了,该我说了,再次感谢上面那位老兄。


首先我们来检测一下我们环境配置的是否成功,打开命令行,输入命令
java org.apache.axis.wsdl.WSDL2Java 回车,(别告诉我你java虚拟机的环境变量还没配)
如果不报异常的话,应该出现很多帮助信息,比如-p是什么意思,-s是什么意思(当然都是英文的)
那么bingo!恭喜你,环境ok!
如果报什么类没有找到啊,什么的,不好意思,再把环境搞一搞。

这个搞好之后,我们就可以根据xxx.wsdl文件来生成客户端和服务端代码了。

先找个盘建个你看着顺眼的文件夹吧,我就是在D盘建了个叫“temp”的文件夹,好,命令cd d:\temp
然后看到光标闪啊闪(D:\temp>)把xxx.wsdl文件考到temp下,然后接着在那个命令行输入
java org.apache.axis.wsdl.WSDL2Java -o Server -d Session -s -S true xxx.wsdl 其实就是这个意思:
java org.apache.axis.wsdl.WSDL2Java -o [文件夹名] -d Session -s -S true [wsdl文件名]
回车之后我们应该发现temp下多了个Server文件夹,里面就是服务端代码了。如果报错的话有可能是wsdl文件格式有问题等。
然后我们生成客户端
java org.apache.axis.wsdl.WSDL2Java -o Client -d Session -S true xxx.wsdl 注意我们的“-s”没有了。这些参数怎么用可以打java org.apache.axis.wsdl.WSDL2Java看帮助。
好了,下面我们打开我们使用的盗版的Myeclipse,新建一个java项目,先建个服务端吧,来个默认文件夹叫src,项目名字随便你起。
把刚temp\Server下面的文件拷到src里,然后项目refrash一下,哇塞!好多警告和错误(常磊老师应该会这么说:)

晕,,先写到这个地方,会宿舍再接着写,唉我这个早出晚归的苦命孩子啊,要宿舍断网那就明天再写,
我得吃鸡腿去了,鸡腿在上海绝对是个奢侈品,呵呵。

ok继续,之所以出现很多错误是因为我们没有把axis相关的包导入到项目中,好,我
们在项目的根目录下建一个叫“lib”的文件夹,然后把Tomcat 5.0
\webapps\axis\WEB-INF\lib下的所有jar包都拷到自己项目的lib里,然后在eclipse里右
键你的项目选择buildpath-configure buildpath-Libraries-addExternalJars 把你
项目下lib里的所有jar包都倒进来,refrash一下你的project,应该只剩警告没有错
误了。
这个是服务器端,我们应该可以看到impl和schemas这两个包,schemas包中应该是我
们wsdl文件中描述的数据类型的类,impl包中应该是跟服务相关的类和接口了,我们
需要关注的是impl包中的xxxSoapBindingImpl.java类,打开应该可以看到很多方法,
返回的都是wsdl文件中描述的方法,当然返回值都是wsdl描述要求的返回值,但是目
前都是返回null,这就是我们要实现的地方了。我们可以再建个business包把方法都
实现了,然后在xxxSoapBindingImpl.java中调用你实现的方法(就是把那些返回是
null的都替换成具体的业务实现具体的值)这样服务器端就写好了。
服务器端写完之后我们就可以通过axis把这个服务给发布了。我们先把写的服务端打
成jar包,项目右键-导出-jar,lib下的东西可以不用导,服务端已经有了。打好之后
把jar包拷到axis\WEB-INF\lib里面,然后点到你的项目文件夹点进->src->impl文件
夹里应该有个deploy.wsdd文件,把它考到刚才建的temp里面然后打开命令行,进到
temp下准备执行部署命令,执行命令之前先把tomcat启动起来,启动之后就可以执行
java org.apache.axis.client.AdminClient deploy.wsdd 命令来部署了,部署成功
会有相应的提示,然后我们到Tomcat 5.0\webapps\axis\WEB-INF下会发现多了个
server-config.wsdd文件,证明你已经部署成功一半了,然后我们重新启动tomcat(
在eclipse里启动或者startup.bat启动,这样可以看有没异常)如果没有异常那么部
署应该成功,打开
http://localhost:8080/axis/ 点list,你的服务应该在里面了。

下午再把客户端的写了~~~~

现在我们来写客户端调用刚才发布的服务,还记得刚temp下面的client文件夹么,里面是我们一开始生成的客户端代码,现在派上用场了。新建项目,考代码,导lib包,这个都跟做服务端时一样,这里不做赘述。搞好之后我们会发现项目中也有impl和schemas两个包,同理我们现在也关注下impl包中的xxxServiceLocator.java,在调用服务端的时候我们要通过它来获得可以使用的对象,建个test包,写个Test类在main方法里写如下几句
xxxServiceLocator xxx= new xxxServiceLocator();
xxx.setxxxEndpointAddress("http://127.0.0.1:8080/axis/services/xxx");//你的wsdl服务地址
try {
  服务用的类 类实例名  = xxx.getxxx();
//通过xxxServiceLocator的实例可以获得我们要调用的服务端的实例下面就可以使用服务端实现的方法了
使用时会抛如下异常
  } catch (ServiceException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

好了,结束了。