5.2 测试webservice接口工具
1. vb脚本来测试。这种方式操作比较方便。
微软公司的
Soap Toolkit 开发工具包,这个工具包可以从微软公司的主页:http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe
2.生成的
*testCase.java文件来进行测试。
详细测试代码,参见
测试webservice用例代码。
6 采用eclipse插件开发
通过这个
ObjectWeb Lomboz工具来实现代码开发。这个是最简单的方式。效率非常高,但是对webservice一些基础知识的理解帮助不大。步骤如下:
1.建一个新的工程。
2.把
wsdl文件放到工程中。
3.点击右键,新建一个
webservice客户端或服务器端代码。可以选择axis、proxy两种方式来实现。
7 采用Axis和Spring进行开发
7.1 基本流程
7.1.1 简单的Web Service实现
包含四个基本步骤:
·创建Web Service的商业逻辑(通常是一些Java类)
·将这些Java类部署到一个SOAP服务器上
·生成客户访问代码
·部署客户应用
·将这些Java类部署到一个SOAP服务器上
·生成客户访问代码
·部署客户应用
注意:WSDL等文件的生成通常是利用厂商提供的工具来完成
7.1.2 在Axis下进行开发
This is a sample of the axis!
To run the bidbuy sample, you must do the following:
1. Set up your CLASSPATH.
2. Start a server.
3. Deploy the service.
4. Run the sample.
1. Set up your CLASSPATH.
(May don’t set it, )
The CLASSPATH must contain: an XML parser (ie., Xerces), JUnit
(www.junit.org), all the jars in the lib directory, and the directory
containing the samples subdirectory.
2. Start a server.
To run the sample, you will first need to run a server. To run a very
simple server you could run, in a separate window:
java org.apache.axis.transport.http.SimpleAxisServer -p 8080
java -Djava.ext.dirs=liborg.apache.axis.transport.http.SimpleAxisServer -p 8080
3. Deploy the service.
To deploy the service, run:
java org.apache.axis.client.AdminClient deploy.wsdd
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient samples\bidbuy\deploy.wsdd
4. Run the sample.
Finally, to run the client, run:
java samples.bidbuy.TestClient
java -Djava.ext.dirs=lib samples.bidbuy.TestClient
7.2 Axis与Spring的结合
Axis与spring结合,需要提供一些额外工作,即将实现web服务接口的Bean与web服务部署中服务类如何关联。如下:
<service name="GameService" type="" provider="Handler" style="rpc">
<parameter name="handlerClass" value="/blog/com.workingmouse.webservice.axis.SpringBeanRPCProvider"/>
<parameter name="springBean" value="gameInfoService"/>
<parameter name="springBeanClass" value="/blog/com.gamebase.kernel.service.GameService"/>
<parameter name="scope" value="Request"/>
<parameter name="allowedMethods" value="*"/>
.......
</service>
参数handlerClass的值是处理Bean与wsdd文件中服务类的关联。
参数springBean的值表示实现接口GameService注册的Bean的名字。
参数springBeanClass的值表示接口GameService的类。
7.3 Webservice代码设计准备
7.3.1 版本选择
根据你的工程的特点,来选择合适的axis版本。
如果在工程中采用是axis1.2版本的jar文件,
如果生成服务器端和客户端时,必须采用合适的axis1.2版本的wsdl2java工具去生成代码。否则,有的不能调用。
7.3.2 软件下载
7.3.3 War文件部署
1.在下载的axis1.4中的本身在webapps下面本身就有一个axis目录(
axis目录本身就是一个war文件解压后的一些文件,然后resin就可以配置web-id指向这个文件,当然也是可以把这war文件,放到resin的webapps目录下,然后启动servlet容器resin就可以了)。也可以在网站上单独的下载war文件。
2.然后可以
http://localhost:8080/axis/来访问,
3.点击
Validation - Validate the local installation's configuration来检查配置是否运行正常。
7.3.4 好的包名命名规则
可以在根目录下建两个源文件目录:
l Component/src/webserviceserver
l Component/src/webserviceclient
源文件可以命名为:
com.qnuse.zj114boss.webserviceclient.huawei.SMSCardService
7.4 Webservie客户端开发
7.4.1 开发步骤
7.4.1.1 获得wsdl文件或wsdl url地址。
7.4.1.1.1 如果本身作为客户端,必须得到对方的对外提供的wsdl地址或wsdl文件。
7.4.1.1.2 如果本身作为服务器端,发布webservcie。获得wsdl文件的方式
7.4.1.1.2.1 方式一:
第一步:在spring工程中的server_config.wsdd 中,
配置要发布的函数
。 增加如下:
实例一:业务受理平台接口配置。
<
service
name
=
"business"
provider
=
"java:RPC"
>
<
operation
name
=
"doService"
returnQName
=
"businessReturn"
returnType
=
"xsd:string"
xmlns:xsd
=
"http://www.w3.org/2001/XMLSchema"
>
<
parameter
name
=
"wsname"
type
=
"xsd:string"
/>
<
parameter
name
=
"param"
type
=
"xsd:string"
/>
</
operation
>
<
parameter
name
=
"wsdlTargetNamespace"
value
=
"http://www.channelsoft.com/webservice/business"
/>
<
parameter
name
=
"allowedMethods"
value
=
"*"
/>
<
parameter
name
=
"className"
value
=
"com.channelsoft.usboss.webservice.business.server.BusinessWebService"
/>
</
service
>
实例二:
单点登陆权限认证的配置方式。
<
service
name
=
"author"
provider
=
"java:RPC"
>
<
operation
name
=
"login"
returnQName
=
"loginReturn"
returnType
=
"xsd:string"
xmlns:xsd
=
"http://www.w3.org/2001/XMLSchema"
>
<
parameter
name
=
"userId"
type
=
"xsd:string"
/>
<
parameter
name
=
"userPwd"
type
=
"xsd:string"
/>
</
operation
>
<
parameter
name
=
"wsdlTargetNamespace"
value
=
"http://www.channelsoft.com/webservice/author"
/>
<
parameter
name
=
"allowedMethods"
value
=
"*"
/>
<
parameter
name
=
"className"
value
=
"com.channelsoft.usboss.webservice.authorization.server.AuthorImp"
/>
</
service
>
第二步:
启动
resin
。 可以采用本机启动resin。或在其他机器上
第三步:
在
ie
录入地址。
就会产生那个
wsdl
文件了。。
7.4.1.1.2.2 或通过axis提供的命令,写一个接口类,然后生成wsdl文件。参见:生成Web服务的服务端和客户端代码
a) 同时也可通过vb脚本来测试一下,看看是否能用。参见:
Webservice测试
7.4.1.2 生成客户端代码
7.4.1.2.1 不同的生成方式
Dos基本命令方式
|
Dos批处理命令方式
|
Eclipse ant方式
|
7.4.1.2.2 对不同的几种方式详细解释
1.
方式一:通过一定命令操作来进行生成客户端。
参数描述:参见客户端命令。
a) 在dos切换到axis工程的lib目录。
b) 实例1:
java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -a -H -d -s -t -S true -p com.qnuse.zj114.webservice http://134.96.71.58/QnInterface/HzGsyj.asmx?wsdl
c) 实例2:执行:java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -s -d Session -Nurn:AddressFetcher2=com.qnuse.usboss.huawei.SMSCardService AddressBook.wsdl
解释:
i. AddressFetcher2 是targetNamespace="urn:AddressFetcher2",有的wsdl文件中没有urn:
则可以采用c)的实现方式
ii.
–p
可以指定自己期望的包名,详细参见命令参数列表。
d) 实例3:
Java -Djava.ext.dirs=lib -a –t -H -p com.qnuse.zj114boss.webserviceclient.huawei.SMSCardService org.apache.axis.wsdl.WSDL2Javahttp://localhost:8080/axis/Hello.jws?wsdl
(
也可以是一个wsdl文件名称)
2.
方式二:通过脚本文件来生成。它将更快速。在axis的目录下,建一个dat或cmd后缀的文件,例如:axis-1_4.dat(axis-1_4.cmd)在这个文件中,文件内容:
java -Djava.ext.dirs=lib -a –s -H -p com.qnuse.zj114boss.webserviceclient.huawei.SMSCardService org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl
这样你可以,每次仅需要修改这个文件wsdl地址或文件名,然后双击即可。
添加-s服务端的代码也将生成。-S true Seketon类也将生成。
3. (推荐方式)方式三:建立一个单独的新工程。可以复用axis-1_4工程。
1. 在网站下载的zip形式的axis-1_4,解压后文件导入eclipse。
2. 新建一个
源文件(source folder),例如:devsrc。
3. 配置工程属性。把devsrc设置到build path,输出路径为:axis-1_4/webapps/axis/WEB-INF/classes,同时别忘了导入所有的jar文件。
目的是:利用eclipse的编译功能,同时方便resin和tomcat来配置web-id。
4. 导入和配置相关文件。把build.xml文件放到devsrc下面,同时也要把将要生成的wsdl文件放到devsrc下面。
5. 配置build.xml文件。在<target wsdl2java> 设置:文件名称、package名称 、namespace 其他相关参数一般不用配置。
公共参数我都已经配置好了。如果想问为什么?请看:axis的帮助文档中的ant task的设置。
6. 然后可以运行<target wsdl2java>。生成了你所有一直盼望出现的文件。
7. 最后,你就可以在相关的文件中进行修改了。每一个文件的使用。详细参见:
(文章)AXIS详细介绍
7.4.1.3 最终将在指定的包名下生成不同文件
根据生成命令参数不同,生成的文件数量也不同。当生成全部文件时,例如:
No.
|
文件
|
用途
|
1.
|
deploy.wsdd
|
MyService
服务的部署描述文件
|
2.
|
MyService.java
|
MyService
服务的接口文件,客户端和服务器端都需要
|
3.
|
MyServiceService.java
|
获得
MyService
服务的接口文件
|
4.
|
MyServiceServiceLocator.java
|
实现
MyServiceService
接口
|
5.
|
MyServiceSoapBindingImpl.java
|
实现
MyService
接口,服务器需要其中补充业务逻辑
|
6.
|
MyServiceSoapBindingSkeleton.java
|
MyService
服务的服务端框架代码
,
实现
MyService, org.apache.axis.wsdl.Skeleton
接口
|
7.
|
MyServiceSoapBindingStub.java
|
MyService
服务的客户端存根代码
,
实现
MyService
接口
|
8.
|
undeploy.wsdd
|
注销
MyService
服务的部署描述文件
|
7.4.1.4 在应用程序中通过代理类调用接口
详细参见,自动生成文件*testCase.java的调用方式。Java代码测试
Note:没有必要设计独立的proxy类,自动生成的代码*Locator本身就是一个proxy类。
7.4.2 其他注意事项
1.可以把dos命令存为.dat格式的文件。然后直接双击就可以完成。这样每次仅仅修改这个文件即可。.cmd格式的文件是Windows NT/2000的批处理文件,其实与BAT文件功能相同,只是为了与DOS/Windows 9x下的BAT有所区别。
2.只要在web.xml中配置了axis的servlet,当启动web服务器时,例如:然后在浏览器中,输入:
http://10.130.24.169:8080/zjusboss/webservice/SysUserSynProcessor?wsdl
a) 10.130.24.169:8080/zjusboss 发布的地址和端口号和web-id(应用标识)
如果本机启动就是localhost:8080/zjusboss
b) webservice是在web.xml<servlet>中配置的。<url-pattern>/webservice/*</url-pattern>。 * 代表了不同的对外的服务名称(也就是对外的接口)。
3.根据不同的需要来设定不同的操作命令的参数,可以通过运行:j
ava -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java
看到详细的帮助。更多的指导参见:axis的指导文档。
7.4.3 生成客户端和服务器端命令详细实例
如果在dos环境下,首先导航到axis的目录。
7.4.3.1 帮助命令
j
ava -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java
7.4.3.2 生成客户端代码命令
java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -a -H -t -p com.qnuse.zj114.webservice http://134.96.71.142/QnInterface/SendMsgService.asmx?WSDL
7.4.3.3 生成全部代码命令
java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -a -H -d -s -t -S true -p com.qnuse.zj114.webservice
http://134.96.71.58/QnInterface/HzGsyj.asmx?wsdl
7.5 Webservice服务器端开发
关于生成wsdl方式,可以参照:
获得wsdl文件或wsdl url地址。
可以采用不同的方式进行开发。
7.5.1 在Axis发布的工程中直接开发
详细参见:
代码工程(它和这个文档一起发布)。它是在axis1.4工程之上来开发的。
7.5.2 可以单独建立一个工程来开发
可以仿照axis发布的zip文件结构。
1.把相关jar导入。
2.采用合适的文件夹结构。
3.在eclipse中和resin(tomcat)服务器中,进行合理的配置。
7.5.3 在Spring框架下开发
1.写一个对外接口(即方法)。可以参见SysUserSynProcessorImp的开发。
2.该接口的实现类。写一个继承ServletEndpointSupport的类。onInit方法内,拿到getWebApplicationContext相关的dao或其他处理service。让dao或service来完成实际的操作。
3.一个部署描述文件,描述这个服务(接口),在server-config.wsdd文件中,手工加入相关的服务信息。它也可以通过axis的部署命令来生成的。
4.访问实例:
http://134.96.71.27:7070/usboss/webservice/SysUserSynProcessor?wsdl(webservice是在web.xml的中对AxisServlet配置的名称)
7.6 Webservice访问方式
1. 启动web服务器,或者,用axis自带的服务器,启动方式是:java -Djava.ext.dirs=lib org.apache.axis.transport.http.SimpleAxisServer -p 8080, 或者把命令保存为cmd格式的文件。
2. 查看web.xml的配置。如果是:
<
servlet-mapping
>
<
servlet-name
>
AxisServlet
</
servlet-name
>
<
url-pattern
>
/services/*
</
url-pattern
>
</
servlet-mapping
>
3. 通过
http://134.96.71.189:8080/axis/services访问。可以看到已经发布的webservice。
7.7 Webservice服务发布
7.7.1 发布方式
1.
JWS (Java Web Service) Files - Instant Deployment
2
.
Custom Deployment - Introducing WSDD
JWS
方式,部署简单,但是不能指定包名,因此不方便分类。而
Custom Deployment
方式,有更加了的灵活,可以指定包名,也可以方便的引用其它相关的类文件,对于复杂的应用非常适合。
7.7.2 wsdd文件发布
1.
修改server-config.wsdd的配置文件。它是webservice的描述文件。如果第一次组建webservice工程,并没有这个文件,可以用下面的命令方式来生成一个。
2.
采用axis发布命令:导航到
WEB-INF/目录下,运行命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd(默认在当前目录下生成的部署描述server-config.wsdd)。
提示:可以把上面的命令保存为cmd、dat格式的文件。准备好文件后,直接双击即可。
7.7.3 部署步骤
1.Axis命令生成部署文件。在生成全部文件时,包括了deploy.wsdd文件。
2.执行axis发布命令或把webservice服务手工写到server-config.wsdd中。
a) 在WEB-info下面的server-config.wsdd文件包含了全部的对外发布的service。
b) 这个server-config.wsdd文件模板,可以在axis.jar解压后,来获得。或执行axis命令来产生。
c) 当web容器(web.xml中已经配置了axisServelt,同时也添加了相关jar包后),启动后,如果访问axis的相关服务,
它将默认去找WEB-INF/下的:server-config.wsdd。
7.8 Webservice测试
可以通过多种方式来测试部署的webservice,一种是VB脚本测试,或是用axis产生的testcase文件。
7.8.1 Vb脚本测试
代码实例:
Dim soapclient, result
Set soapclient = CreateObject("MSSOAP.SoapClient30")
soapclient.mssoapinit "http://134.96.71.142/QnInterface/SendMsgService.asmx?WSDL"
result = soapclient.QnSendMail_GS("zhanglelei@channelsoft.com", "", "", "")
MsgBox
"result=" & result
7.8.2 Axis生成的testcase文件测试
没有必要来单独设计一个代理类,自动生成的代码*Locator本身就是一个proxy类。
可以用axis自动生成的*testCase.java文件,通过eclipse来直接测试webservice的调用情况。
详细参见:
测试webservice用例代码
7.9 Webservice日志跟踪
1. 使用log4j工具步骤?,
答:必须先引入相关的jar文件,然后正确的配置log4j.xml或log4j.property文件。并且放置到正确的文件夹中。
2. log4j配置文件的选择?
答:建议采用log4j.xml文件,更加易读。
3. 在resin的conf文件中的log配置方式?
答:可以在log4j.xml文件中配置,也可以在resin.conf中配置,在<error-log id='logs/error.log'rollover-size='5MB'/>下面增加:<stdout-log id='logs/stdout.log' rollover-size='5MB'/>,就可以实现标准输出信息到stdou.log中。 和在log4j.xml中的配置是也可以达到相同的效果。
4. commons-logging.properties的作用?
答:通过配置它,可以使你方便的配置,使用不同的log工具。如果删除它,就默认使用你当前的日志工具,例如:log4j, 详细看axis中的,文件中描述。当然,可以删除这个文件,仅采用log4j工具.
5. 是否在web.xml配置?
答:如果配置文件,log4j.properties 或 log4j.xml默认是在,WEB-INF/classes下,则将不必要在web.xml文件配置,系统将自动的进行加载。
6. 如何指定日志路径?
答:指定自己指定的记录日志的包路径。如果配置级别是:debug, 只有在包为com.int97时,有debug代码时,才会向文件中输出数据。
7. log4j.additivity.XXX= 的含义?
`
答:若为 false,表示Logger 的 appender 不继承它的父logger
若为true,则继承,这样就兼有自身的设定和父logger的设定