在websphere上发布axis1的webservice



      由于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是我写的一个快捷批处理, 在程序启动时可以进行发布与删除.



在websphere上发布axis1的webservice
 
 

  

    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调用时要加.

你可能感兴趣的:(ant,webservice,servlet,ext,websphere)