首页 文章

访问在tomcat中部署的SoapUI Mock服务中的文件资源

提问于
浏览
8

Problem in short : 关于项目路径访问 SCRIPT Dispatcher 中的本地 file ,即 def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml") . 当测试从SoapUI运行 Mock Service 时,这是 working fine . 但是当针对 Deployed(remote tomcat) Mock Service 运行相同的测试时,为上述语句( groovyUtils.projectPath )提供 nothing or empty .

注意:这里的responseFileName存在于相同位置(运行SoapUI工具时),相对于soapui项目xml

More Details about the problem:

想在tomcat中部署上面的模拟服务 . 因此,使用SoapUI中的 Deploy as war 创建了战争,这创建了一个 .war 文件 . 如果 .war 被提取,它将显示以下目录结构 .

└───WEB-INF
    ├───actions
    ├───lib
    ├───listeners
    └───soapui

soapui project xml 出现在 WEB-INF/soapui 目录下 .

由于 Script 调度程序正在使用 groovyUtils.projectPath ,并且 .war 文件没有 responseFile ,因此使用7zip实用程序在 WEB-INF/soapui 目录下添加了所需的responseFile . 并在tomcat中部署了更新的 .war 文件,这是成功的 .

当测试请求被命中 deployed mock service 时,它在tomcat的catalina.out中显示 empty response 和以下 stacktrace

17-Jan-2016 10:13:32.356 SEVERE [http-nio-8080-exec-6] com.eviware.soapui.mockaswar.MockAsWarServlet.service null
 com.eviware.soapui.impl.wsdl.mock.DispatchException: Failed to dispatch using script; java.io.FileNotFoundException: \responseFile.xml (The system cannot find the file specified)
        at com.eviware.soapui.impl.wsdl.mock.dispatch.ScriptMockOperationDispatcher.selectMockResponse(ScriptMockOperationDispatcher.java:91)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation.dispatchRequest(WsdlMockOperation.java:199)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchPostRequest(WsdlMockDispatcher.java:218)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchRequest(WsdlMockDispatcher.java:113)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockRunner.dispatchRequest(WsdlMockRunner.java:142)
        at com.eviware.soapui.mockaswar.MockAsWarServlet$MockServletSoapUICore.dispatchRequest(MockAsWarServlet.java:247)
        at com.eviware.soapui.mockaswar.MockAsWarServlet.service(MockAsWarServlet.java:182)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
        at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
  • 如何引用 SCRIPT Dispatcher中的资源文件,以便它以两种方式工作:

一个 . 在SoapUI中的模拟服务

湾在Tomcat中部署了模拟服务

顺便说一句,我不确定它是否有任何错误 .

使用:

SoapUI Open Source Edition - 5.2.1

Apache Tomcat - 8.0.5

Update: 在简短描述中已经尝试过的内容除外

Script Dispatcher
enter image description here
中仅提供以下变量(带下划线)

如果你在 Script Dispatcher 中使用 context ,遗憾的是 servlet context 工作的常用方法如下所示

没有方法签名:com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getResourceAsStream()适用方法无签名:com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath()适用

很明显,因为SoapUI的WsdlMockRunContext的API没有这样的公共方法 .

我相信必须有一种不同的方式,我不知道并希望从社区中了解到 .

1 回答

  • 7

    主要问题是: groovyUtils.projectPath 仅适用于第一个用例,而 nothing 适用于第二个用例 .

    经过大量的试验和错误以及在网上搜索后,其中一个示例和以下方法能够访问本地文件资源以下的问题中提到的用例 .

    • soapUI 本身作为模拟服务运行

    • 在远程tomcat中部署为战争

    所以更改了代码( script of mock dispatcher
    from:

    def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
    

    to:

    def projectPath = new File(mockOperation.mockService.project.path).parent
       def file = new File(projectPath.+"/${responseFileName}.xml")
    

    注意:文件(资源)必须在磁盘上存在soapui项目文件的同一位置可用,即在creatin .war文件之后,更新.war文件并确保所需文件位于WEB-INF / soapui下soapui的项目xml可用的地方 .

相关问题