由于websphere还在1.4的jdk上, 所以, xfire,cxf 不能在websphere 上运行, 其选择也只能用axis1或axis2了, 最近的一个项目中, 美国的一个中间服务商提供给公司一个webservice接口文件(wsdl), 公司用axis1对其进行了客户端的生成, 经过在生产环境中短时间的测试证明是可运行的, 但是生产环境的数据比较敏感, 一般不给我们这边进行长时间的测试, 所以, 这就要求我们根据wsdl生成服务端的程序模拟这个webservice以供测试, 关于底程的业务逻辑的重构暂且不谈,主要是公司要求用websphere的服务器发布, 于是用websphere自带的webservice进行开发,完成后发布至本地的服务器上进行了测试, 居然有版本冲突的问题,开发工具自带的服务器可以跑,但发布后就报自定义对象不能序列化的错误,实在的头大,于是就放弃继而采用axis1, 以记录实现步骤.
1) 开发还是在wsad中进行,以确保其环境可以适应websphere, 通过wsdl生成server端(用ant自动生成,这样可重用).
<?xml version="1.0" encoding="UTF-8"?> <project name="wsclient" default="all" basedir="."> <property name="axis.home" value="C:\axis-1_4" /> <property name="options.output" location="../src"/> <path id="axis.classpath"> <fileset dir="${axis.home}/lib"> <include name="**/*.jar" /> </fileset> </path> <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" /> <target name="init"> <echo>Warning: please update the associated WSDL file(s) in the folder wsdl before running the target!</echo> <echo>Warning: Just run the target(s) related with your developing work!</echo> <echo> </echo> </target> <target name="-WSDL2Axis" depends="init"> <mkdir dir="${options.output}"/> <axis-wsdl2java serverside="true" output="${options.output}" url="${options.WSDL-URI}" verbose="true"/> </target> <target name="all"> <antcall target="XXX.wsdl"/> </target> <target name="XXXService"> <antcall target="-WSDL2Axis"> <param name="options.WSDL-URI" location="XXX.wsdl"/> </antcall> </target> </project>
2) 将生成的deploy.wsdd与undeploy.wsdd拷贝到指定目录, 如果有多个可以合并一下(多个wsdl自动生成)
3) 在下载X:\axis-1_4\webapps找到axis的目录, 放到wsad中,可据需要重命名项目, 对于其中的*.class的文件最好打个jar包放入lib中.(给个打jar的例子)
<?xml version="1.0" encoding="UTF-8"?> <project name="axis" default="tojar" basedir="."> <property name="dirs.classes" value="."/> <target name="tojar"> <jar destfile="./inner.jar" basedir="${dirs.classes}"/> </target> </project>
4) 将生成的server端代码放到JavaSource的包中并加入相关包build, 完成后目录结构如下.
其中deploy.wsdd与undeploy.wsdd是发布文件,在上面已经说过, 这个deploy.bat与undploy.bat是我写的一个快捷批处理, 在程序启动时可以进行发布与删除.
deploy.bat
set Axis_Lib=../WEB-INF/lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Axis_Servlet=http://localhost:9080/XXXservice/servlet/AxisServlet %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd
undeploy.bat
set Axis_Lib=C:\axis-1_4\lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Axis_Servlet=http://localhost:9080/XXXservice/servlet/AxisServlet %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% undeploy.wsdd
这两个批处理要在程序运行起来时执行.
另外说明两点:
1: axis的包中少个文件, server-config.wsdd, 不知怎么搞的,内容大了给个下载:
2: 最好在RAD上开发,j2ee可到1.4少管很多exception, 如果要在wsad2.1.5上跑的话,可能要加一部分包,至少client调用时要加.