代码之家  ›  专栏  ›  技术社区  ›  aaimnr

模拟Java Web服务的最佳方法[关闭]

  •  9
  • aaimnr  · 技术社区  · 17 年前

    我不得不嘲笑相当复杂的Java Web服务,我正在寻找正确的解决方案。一种方法是使用SOAP UI,但我需要能够修改服务器状态的东西,即一个请求会影响未来的请求。

    在这种特定的情况下,可以通过将序列化对象保存到磁盘上,有时生成对原始客户机WebService的异步响应来快速完成。

    这两个需求阻碍了我使用SOAPUI——groovy逻辑将变得非常复杂,可能难以实现。

    我的问题:

    1)在这个上下文中是否有其他SOAPUI优点(例如容易迁移到新版本的WSDL)通过自定义Java模拟实现?

    2)什么是从WSDL生成WebService的最合适的方法,并且仍然能够连接到一些自定义功能,即通过附加一些可以在单独文件中编辑的钩子(以便于从更新的WSDL进一步重新生成WS代码)?

    3 回复  |  直到 10 年前
        1
  •  2
  •   Michał Niklas    17 年前

    对于简单的模拟,我使用soapui,而对于在请求之间必须更改状态的更复杂情况,我使用用python编写的简单Web服务仿真器。这样的仿真器使用从真实的Web服务创建的回复模板或我在soapui中创建的响应。这样我就能控制所有的逻辑。

    我上一个项目的模拟器有300多行Python代码,但是对于以前的,更简单的是,它有大约150行Python代码。

        2
  •  5
  •   alightgoesout    17 年前

    你应该看看 EasyMock 允许以编程方式构建模拟。可以为模拟指定非常复杂的行为。

        3
  •  3
  •   Nick Holt    17 年前

    假设您在客户机中使用某种生成的存根?您应该使用模拟API(jmock或easymock)之一模拟存根,并将模拟注入被测试的类中。

    在处理调用的服务器端测试中,注入它可能用来完成其工作的任何对象的模拟。

    作为旁白,您应该努力将所有调用保存在一个单元测试本地(进行中)中。它使控制来自被测试类所依赖的任何对象的返回值变得容易,并且当测试套件增长时,将有助于防止单元测试在构建过程中成为瓶颈。

    关于从WSDL生成一个Java类(ES),Apache轴有一个称为WSDL2Java的东西,它生成了我前面提到的客户端存根。这种实用程序在Web服务框架中很常见,但自从EJB3 Web服务引入以来,现在可能已经被替换了。 javax.xml.rpc.ServiceFactory 存在。

    这里有一个关于EJB3 Web服务和客户机的教程( http://www.theregister.co.uk/2007/01/23/ejb_web_services/ )