您的位置:首页 > 产品设计 > UI/UE

第一章 使用SOAPUI测试和开发Web Services Stubs

2018-01-23 08:14 483 查看
Stub(桩件)的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦。对stub应答的设定是为了通过测试。 stubs只检查的是状态(state)。
本章内容:
n  使用SoapUI工具生成一个WSDL优先的web 服务
n  在测试前,开发一个SOAP web服务
n  使用一个WSDL更新一个SOAP项目
n  使用WSDL
重构更新一个SOAP项目
n  测试前,生成并开发一个RESTful webservice stub(桩件)
n  使用REST discovery生成SoapUI测试

1.1  简介

Web Service Stubs一般是在项目早期阶段就被开发,Stubs目的是:当整个web服务被实现时,给客服端提供有限的功能。该章节将告诉,使用SoapUI怎么帮助你快速测试和开发简单的Java REST和SOAP web服务Stubs、以及如何通过录制web服务的交互过程生成测试?使用JAVA编写的Web
Service Stub能使用Java成功执行。
除了对基本的SoapUI测试提供快速的热身之外,服务接口和实现示例将在本书后面被重用作更高级主题的基础。
在本章你能学到什么,大致的内容如下:
1.     怎么使用SoapUI的WSDL帮助你测试、更新、重构、开发一个简单的SOAP Web 服务的Stub。
2.     怎么使用SoapUI帮助你测试、开发一个简单的RESTWeb服务的Stub
3.     怎么使用SoapUI的发现(discovery)功能生产测试
4.     使用Apache CXF生成、实现并运行基础的JAX-RS和JAX-WS Web服务Stubs
在学习前,你需要部署环境,你需要如下软件:
Ø  JDK:编译运行代码(1.6以上)
Ø  Apach CXF:用于构建、运行(有时),REST和SOAP Web服务
Ø  IDE(可选):使用一个IDE,例如Eclipse,能更容易的发现、编译、执行实例代码
本文开始,不包括SoapUI的安装、启动、SoapUI概述,直接从如何建立基础的SoapUI REST和SOAP 项目、测试、断言(assertion)开始。如果想从起步开始,可以看:http://www.soapui.org

1.2  使用SoapUI工具生成一个WSDL优先的Web服务

本部分将展示,怎么把Apache CXF集成到SoapUI工具上生成一个可运行的空Java Web服务,该服务是使用它的WSDL实现的。这可能是有用,如果需要一个快速的菜单驱动方法去创建一个Soap Web服务,该Web服务能独立被实现和部署到SoapUI上。

1.2.1准备开始

         该WSDL被用于定义一个简单的invoice WEB
服务。它只有一个函数(operation)去引用一个基本的invoice文档,该操作的参数invoice数量:

l  Operation:getInvoice 

l  Request:invoiceNo : string

l Response:InvoiceDocument(invoiceNo : string, company : string, amount: string)
l  Location: http://localhost:9001/ws/invoice/v1
该WSDL可以在本章代码块中:soap/invoicev1/wsdl/invoice_v1.wsdl。在这之前需要把Apache CXFWeb服务框架集成到SoapUI工具生成Web服务Stub。下载最新版本的下载链接:http://cxf.apache.org/download.html(我使用3.2.1版本)。版本3.01需要JDK1.7。

1.2.2 创建步骤

         首先,配置SoapUI能够生产并构建invoice的web服务。这时,作为一个标准的Java运行该服务。执行的步骤如下:

1.        启动并打开SoapUI,选择ToolsàApache CXF,点击右下角的Tools,进入SoapUI Preferences窗口:



这时在CXF 2.X中选择下载的Apache CXF的bin目录:



2.        在如下界面:



输入如下信息:

l  WSDL:<chapter1 samples>/soap/invoicev1/wsdl/invoice_v1.wsdl,如果这已经填了,在CustomArgs中的Tool Args中就不需要填写,不让回报错!

l  Output directory:生成代码存放的位置。例如: <chapter1 samples>/soap/invoicev1/src/main/java

l  Package:生成源代码的包名,例如:ws.invoice.v1

Artifact Options:只选择ServerImplementation。对于,client与build.xml 也是可用的。我们使用SoapUI作为客户端且不需要Ant



3.        为了自动编译生成的服务代码,在Advanced的Tab下:



进行如下操作:

l  选择Compile

l  提供一个ClassFolder值,作为存放结果Java类文件的存放目录,例如:<chapter1 samples>/soap/invoicev1/target/classes

l  选中“ValidateWSDL(可选)”检查WSDL文件(在高级Tab下检查结构和使用基础WS-I编译检查WSDL)。Invoice_v1.wsdl不应该输出任何东西。



 

4.        在Custom Args Tab下,把WSDL所在位置输入在Tool Args中。这告诉web服务在运行时从哪里找到WSDL文件。设置像invoice_v1.wsdl的值是被期望作为classes的根目录。



PS:如果在Basic Tab下的WSDL路径已经填写了,这里就不需要填写,如果填写了,会报错误“WSDLToJava
Error”:




5.        点击”Genrate”按钮。如果执行成功,输出类似如下的结果:
 


     
可以在输出文件路径下,看到成的Java源码文件,输出文件路径例如:<chapter1 samples>/soap/invoicev1/src/main/java/ws/invoice/v1/。在class目录下关联class文件:<chapter1samples>/soap/invoicev1/target/classes/ws/invoice/v1/。
         注意:MAC/LinuxIssue:如果出现一个像“./wsdl2java.sh: No such file or directory”的错误,这时解决办法是:打开<Apache CXF Home>/bin/wsdl2java.sh,然后复制wsdl2java内容到wsdl2java.sh;命令是:cp wsdl2java wsdl2java.sh
6.        在运行服务之前,需要复制invoice_v1.wsdl文件到生成的类目录下,例如类目录为:<chapter1 samples>/soap/invoicev1/target/classes。否则,当运行服务时,将看到一个类似“[failed toocalize]cannot.load.wsdl(invoice_v1.wsdl)”的错误。
PS:由于wsdl需要访问http://soapui.cookbook.example,这个来获取targetNamespace以及SOAPOperation等,本网站无法访问,造成提示上述问题,以至于下面的服务启动提示该问题!!!!
7.        最后,启动服务。执行命令:
cd <chapter1samples>/soap/invoicev1/target/classes
javaws.invoice.v1.InvoicePortType_InvoicePort_Server
       为了确认服务是否启动成功,打开浏览器,在浏览器输入:http://localhost:9001/ws/invoice/v1?wsdl,这时候如果看到invoice_v1.wsdl正常显示,说明生产的服务已经启动并正常运行。

1.2.3 如何工作

         SoapUI实际上正在为各种Web服务框架构建命令行参数。在上述的例子中,喜欢使用命令的可以直接运行:<Apache CXF Home>/bin/wsdl2java

注意:Apache CXF wsdl2javascript
关于wsdl2java的信息,可以看:http://cxf.apache.org/docs/wsdl-to-java.html, 快速看下生成的源文件。主要包括如下几点:
1.        运行wsdl2java选项生成Java标准的JAX-WS Web服务代码,该代码带有源自WSDL文件的类型和方法。
2.        Java JDK附带一个JAX-WS的实现:
²  不需要任何编译或者运行时依赖的库,例如:Apache CXF库
²  不需要servlet容器来发布web服务,例如Tomcat或者Jetty。如果查看InvoicePortType_InvoicePort_Server.java,可看到服务已经被发布,发布的服务使用的是JDK默认的HTTP服务中的javax.xml.ws.Endpoint类。这个静态的Endpoint.publish(…)方法绑定生成的服务implementation(InvoicePortImpl.java)到endpoint 地址,以至于invoice请求能被getInvoice()方法处理。
²  该服务是非常容易移植的,只需要一个Java JRE就能运行它
²  在运行时需要WSDL文件。wsdlLocation参数被应用于第4步,被设置成InvoicePortImpl.java类中@javax.jws.webService注释的一个属性。
²  服务的Emdpoint和超时(默认值为5分钟)很容易更改。对InvoicePortType_InvoicePort_Server.java进行如下修改:
Endpoint: String address="http://localhost:9001/ws/invoice/v1";
Timeout: Thread.sleep(5 * 60 *1000);
重新编译
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: