lizongbo at 618119.com 工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC

2007年12月28日

基于Axis的WebService测试,开发,部署

Filed under: Java,JAVA IDE — 标签:, , , , — lizongbo @ 09:01

前段时间给同事做了简单的WebService开发培训,效果不太理想。
因此把当时准备的资料备份一下,避免清理硬盘的时候弄没了。

带抓图的word文档在:http://618119.com/docs/WebService/Webservice_axis_dev.doc

http://618119.com/docs/WebService/soaptest.html

下面是从word里保存出来的文字:
1 测试
不编写代码的情况下,对webservice进行测试,编写代码进行测试的方法.
1.1 使用xmlspy测试接口
测试webservice接口地址为:
http://www.webservicex.net/globalweather.asmx?WSDL
http://www.ayandy.com/Service.asmx?WSDL
http://www.ayandy.com/Service.asmx/getSupportProvince

http://www.ayandy.com/Service.asmx?op=getSupportCity

在xmlspy中的测试步骤:
1. 启动XmlSpy,主菜单–>SOAP –> Create new SOAP request.

2. 选择wsdl文件或者提供wsdl的网址:

3. 选择要测试的方法

4. 填写调用参数

5. 发送请求

6. 查看服务端返回的结果

7. 由于wsdl描述的webservice入口和我们要连接的服务器不一定是同一个地址,因此还可以改变连接参数

8. 因此
参考: http://www.altova.com/products/xmlspy/soap_test_debugger.html

这种方式的优点是:门槛低,只要会填参数就可以测试webservice。
缺点是:xmlspy不是免费的,xmlspy文件超大,携带不方便。无法查看http header.
1.2 用tcpmon测试捕获SOAP数据包
工具来源,下载地址:
http://apache.mirror.phpchina.com/ws/commons/tcpmon/1_0/tcpmon-1.0-bin.zip

优点,文件小巧,不只是测试webserice可以用,测试其它http接口也很方便。
缺点,没法设置contenttype,所以会有乱码。
1.3 用xmlhttp发送SOAP数据包

优点,简单的html可以存放在各地,可以在预先准备好SAOP数据的情况下,将该测试用例发给工程人员在现场进行测试。
缺点,soap数据要靠自己组装。

2 WebService开发
2.1 客户端代码开发
2.1.1 Wsdl2java命令方式
2.1.1.1 预备wsdl2.bat
wsdl2java.bat的内容为:
%JAVA_HOME%/bin/java.exe -classpath “./-ant.jar;./.jar;./commons-discovery-0.2.jar;./commons-logging-1.0.4.jar;./jaxrpc.jar;./log4j-1.2.8.jar;./saaj.jar;./wsdl4j-1.5.1.jar”  org.apache..wsdl.WSDL2Java  -v -n -O -1 -D -W -t -a -o E:\mywork\wsdl2javatest\src http://www.webservicex.net/globalweather.asmx?WSDL

(没有 –s –S两个选项, -s用来生成服务端代码,使用-s后, -t无效).
-o是原代码输出的地方。
2.1.1.2 在Jbuilder新建空白工程.
2.1.1.3 导入Axis和Junit的lib.
2.1.1.4 运行wsdl2java.bat
2.1.1.5 在Jbuilder中测试代码
2.1.1.6 以Ant方式运行WSDL2Java

wsdl2java.xml的配置为:

<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
default=”buildclient” xsi:type=”project”>
<path id=”axis.classpath”>
<fileset dir=”./”>
<include name=”**/*.jar” />
</fileset>
</path>
<taskdef resource=”axis-tasks.properties”  classpathref=”axis.classpath” />

<!– http://10.108.20.207:8080/test/services/Version?wsdl –>
<!– http://www.ayandy.com/Service.asmx?WSDL –>
<target name=”buildclient”>
<axis-wsdl2java
url=”http://www.ayandy.com/Service.asmx?WSDL”
output=”E:/mywork/testwebws/classes/ws-gen/src”
all=”true”
debug=”true”
deployscope=”Request”
helpergen=”true”
noimports=”false”
serverside=”false”
skeletondeploy=”false”
testcase=”true”
timeout=”-1″
typemappingversion=”1.1″
verbose=”true”
noWrapped=”true”>
<!–mapping
namespace=”http://10.108.20.207:8080/test/services/Version” package=”com.test.services.Version”/>
<mapping namespace=”http://xml.apache.org/xml-soap” package=”org.apache.xml.xml_soap”/ –>

<classpath refid=”axis.classpath”/>
</axis-wsdl2java>
</target>
</project>

2.1.2 完全在Jbuilder中开发客户端代码
2.1.2.1 新建客户端工程.
点Finish.
2.1.2.2 新建Axis Web Services Client Configuration.
2.1.2.3 将Jbuilder自带的Axis1.2 lib升级为1.4版本
1.4版本生成的代码和 1.2有所不同。
2.1.2.4 创建Webservice Client
2.1.2.4.1 导入 WSDL文件方式一 — 直接填写URL
输入url之后,鼠标点到”Opeerations”,系统会自动读取url的内容。
url例子:http://www.webservicex.net/globalweather.asmx?WSDL

可以看到能够调用的WebService方法:
2.1.2.4.2 导入 WSDL文件方式二– 导入WSDL文件
2.1.2.4.3 直接操作
点击感叹号,直接选择
2.1.2.5 生成客户端代码
2.1.2.6 进行单元测试
2.1.2.6.1 察看生成好的测试代码.
2.1.2.6.2 补充测试代码
生成的测试代码只是测试框架,需要补充具体的测试代码
//TBD
就是需要补充代码的地方
补充了测试代码之后:

2.1.2.6.3 运行单元测试
2.1.2.6.4 观察单元测试结果
2.1.2.7 捕获单元测试数据包
2.1.2.7.1 启动捕获数据的代理服务器
双击运行 tcpmon.bat
使用 listener模式,Listen Port 填写 8080
Target Hostname为刚才察看到的远程ip
TargetPort 为80.
点“Add”.
察看监控面板。
2.1.2.7.2 修改测试代码的目标地址
2.1.2.7.3 运行单元测试
2.1.2.7.4 察看监控得到的数据
观察http请求的头信息.
2.1.2.8 捕获html测试数据包
2.2 服务端代码开发
2.2.1 基于Axis开发服务端
2.2.1.1 新建服务端工程.
2.2.1.2 新建服务端接口声明(可选).
2.2.1.3 新建服务端实现类.
填写实现代码
2.2.1.4 通过Jbuilder导出实现类为WebService接口.
必须选J2EE 1.3 ,因为要选择1.4的话,必须实现Remote接口
创建 Axis Server Module.
由于目前没有创建WebApp,因此还需要新建Web Module.
选择 Servlet 2.3 和JSP 1.2。
2.2.1.5 启动WebService服务端
http://localhost:8080/ws/servlet/AxisServlet
http://localhost:8080/ws/services/WsServerImpl?wsdl

2.2.2 在Spring中导出bean为WebService接口.
略。
3 WebService手工部署
3.1 部署Axis
3.1.1 提取Axis的web应用
提取 axis-bin-1_4.zip\axis-1_4\webapps\axis
到 E:\apache-tomcat-6.0.14\webapps\axis
3.1.2 启动Tomcat并检查axis是否正常
3.2 发布WebService
3.2.1 查看现有部署的服务
命令行为:
%JAVA_HOME%/bin/java.exe -classpath “E:\mywork\wsserver\classes;./axis-ant.jar;./axis.jar;./commons-discovery-0.2.jar;./commons-logging-1.0.4.jar;./jaxrpc.jar;./log4j-1.2.8.jar;./saaj.jar;./wsdl4j-1.5.1.jar”  org.apache.axis.client.AdminClient  -d -lhttp://localhost:8080/axis/servlet/AxisServlet list

3.2.2 编写部署描述文件 axis.wsdd

<?xml version=”1.0″ encoding=”UTF-8″?>
<deployment xmlns:java=”http://xml.apache.org/axis/wsdd/providers/java”
xmlns:handler=”http://xml.apache.org/axis/wsdd/providers/handler”
xmlns=”http://xml.apache.org/axis/wsdd/”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
name=”defaultClientConfig” xsi:type=”deployment”>
<service name=”WsServerImpl” type=”” regenerateElement=”true”
provider=”java:RPC” style=”rpc” use=”encoded” validate=”true”>
<parameter name=”scope” value=”Request” regenerateElement=”false”/>
<parameter name=”className” value=”com.lizongbo.WsServerImpl” regenerateElement=”false”/>
<parameter name=”allowedMethods” value=”*” regenerateElement=”false”/>
<namespace>http://lizongbo.com</namespace>
</service>
</deployment>

3.2.3 复制class文件
复制E:\mywork\wsserver\classes下面的com目录的文件到
E:\apache-tomcat-6.0.14\webapps\axis\WEB-INF\classes\com
重新启动Tomcat.
3.2.4 命令行方式发布WebService
%JAVA_HOME%/bin/java.exe -classpath “E:\mywork\wsserver\classes;./axis-ant.jar;./axis.jar;./commons-discovery-0.2.jar;./commons-logging-1.0.4.jar;./jaxrpc.jar;./log4j-1.2.8.jar;./saaj.jar;./wsdl4j-1.5.1.jar”  org.apache.axis.client.AdminClient  -d -lhttp://localhost:8080/axis/servlet/AxisServlet axis.wsdd
3.2.5 察看部署的服务
http://localhost:8080/axis/servlet/AxisServlet
http://localhost:8080/axis/services/WsServerImpl?wsdl

3.2.6 测试部署的服务
略…
4 附录
4.1 相关资源下载
Axis1.4 :
http://apache.mirror.phpchina.com/ws/axis/1_4/axis-bin-1_4.zip
http://apache.mirror.phpchina.com/ws/axis/1_4/axis-src-1_4.zip
TcpMon 1.0:
http://apache.mirror.phpchina.com/ws/commons/tcpmon/1_0/tcpmon-1.0-bin.zip
http://apache.mirror.phpchina.com/ws/commons/tcpmon/1_0/tcpmon-1.0-src.zip

Ant 1.7.0 :
http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip

Tomcat 6.0.14:
http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.14/bin/apache-tomcat-6.0.14.zip

XmlSpy 2008 :
http://software.altova.com/download/2008/XMLSpyEnt2008.exe
http://www.jydex.cn/attachments/month_0711/w2007111215514.rar

Spring 2.5:
http://superb-east.dl.sourceforge.net/sourceforge/springframework/spring-framework-2.5-with-dependencies.zip

4.2 相关参考资料
参考: http://www.ibm.com/developerworks/cn/webservices/ws-noide1/
http://www.ibm.com/developerworks/cn/webservices/ws-noide2/
http://www.blogjava.net/pdw2009/archive/2007/10/25/155889.html
http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/

4.3 将wsdl生成文档提供给接口调用者
在xmlspy中,打开wsdl文件,
主菜单–> WSDL –> Generate Documentation。

没有评论 »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress