访问 tomcat 中部署的 SoapUI 模拟服务中的文件资源
Accessing file resources in SoapUI Mock Service Deployed in tomcat
问题简而言之: 在 SCRIPT Dispatcher 中访问本地 file
关于项目路径,即 def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
.当测试来自 SoapUI Mock Service 时,工作正常。但是当针对 Deployed(remote tomcat) Mock Service 的相同测试 运行 时,为上述语句 (groovyUtils.projectPath
) 给出 nothing or empty
。
Note: Here the responseFileName
is present in the same location(when running SoapUI tool), relative to the soapui project xml
有关问题的更多详细信息:
想要在 tomcat 中部署上述模拟服务。因此,使用 Deploy as war 从 SoapUI 创建了 war,这创建了一个 .war
文件。如果 .war
被解压,它会显示以下目录结构。
└───WEB-INF
├───actions
├───lib
├───listeners
└───soapui
并且 soapui project xml
存在于 WEB-INF/soapui
目录下。
因为 Script
调度程序正在使用 groovyUtils.projectPath
,而 .war
文件没有那个 responseFile
,在 WEB-INF/soapui
目录下添加了所需的 responseFile 使用7zip 实用程序。并在 tomcat 中成功部署更新的 .war
文件。
当测试请求被命中到已部署的模拟服务时,它显示空响应 以及 tomcat 的 catalina.out 中的以下 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
调度程序中引用 资源文件,以便它可以双向工作:
一个。 SoapUI
中的模拟服务
b。在 Tomcat
部署模拟服务
顺便说一句,我不确定这样做的方式是否有任何错误。
使用:
SoapUI 开源版 - 5.2.1
Apache Tomcat - 8.0.5
更新: 除上述简短描述外已经尝试过的内容
在 Script Dispatcher 中只有以下变量(带下划线)可用
并且如果您在 Script Dispatcher 中使用 context
,不幸的是 none servlet context[=98= 的常用方法] 工作如下
No signature of method: com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getResourceAsStream() is applicable
No signature of method: com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath() is applicable
很明显,因为 WsdlMockRunContext 的 SoapUI API 没有可用的 public 方法。
我相信一定有一种不同的方式,我不是 ware 并且希望从社区了解。
主要问题是:groovyUtils.projectPath
仅适用于第一个用例,而 nothing 用于第二个用例.
经过大量试验和错误并在网上搜索后,found a hint在其中一个样本中采用以下方法能够访问本地文件资源均低于问题中提到的用例。
- 运行 作为来自
soapUI
本身的模拟服务
- 在远程 tomcat
中部署为 war
所以更改了代码(模拟调度程序的脚本)
来自:
def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
至:
def projectPath = new File(mockOperation.mockService.project.path).parent
def file = new File(projectPath.+"/${responseFileName}.xml")
Note: file(resource) must be available in the same location
where soapui project file is present on the disk i.e., after creatin .war
file, update .war
file and make sure the required file is placed under WEB-INF/soapui
as that where soapui's project xml is available.
问题简而言之: 在 SCRIPT Dispatcher 中访问本地 file
关于项目路径,即 def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
.当测试来自 SoapUI Mock Service 时,工作正常。但是当针对 Deployed(remote tomcat) Mock Service 的相同测试 运行 时,为上述语句 (groovyUtils.projectPath
) 给出 nothing or empty
。
Note: Here the
responseFileName
is present in the same location(when running SoapUI tool), relative to thesoapui project xml
有关问题的更多详细信息:
想要在 tomcat 中部署上述模拟服务。因此,使用 Deploy as war 从 SoapUI 创建了 war,这创建了一个 .war
文件。如果 .war
被解压,它会显示以下目录结构。
└───WEB-INF
├───actions
├───lib
├───listeners
└───soapui
并且 soapui project xml
存在于 WEB-INF/soapui
目录下。
因为 Script
调度程序正在使用 groovyUtils.projectPath
,而 .war
文件没有那个 responseFile
,在 WEB-INF/soapui
目录下添加了所需的 responseFile 使用7zip 实用程序。并在 tomcat 中成功部署更新的 .war
文件。
当测试请求被命中到已部署的模拟服务时,它显示空响应 以及 tomcat 的 catalina.out 中的以下 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
调度程序中引用 资源文件,以便它可以双向工作:一个。 SoapUI
中的模拟服务b。在 Tomcat
部署模拟服务
顺便说一句,我不确定这样做的方式是否有任何错误。
使用:
SoapUI 开源版 - 5.2.1
Apache Tomcat - 8.0.5
更新: 除上述简短描述外已经尝试过的内容
在 Script Dispatcher 中只有以下变量(带下划线)可用
并且如果您在 Script Dispatcher 中使用 context
,不幸的是 none servlet context[=98= 的常用方法] 工作如下
No signature of method: com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getResourceAsStream() is applicable
No signature of method: com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath() is applicable
很明显,因为 WsdlMockRunContext 的 SoapUI API 没有可用的 public 方法。
我相信一定有一种不同的方式,我不是 ware 并且希望从社区了解。
主要问题是:groovyUtils.projectPath
仅适用于第一个用例,而 nothing 用于第二个用例.
经过大量试验和错误并在网上搜索后,found a hint在其中一个样本中采用以下方法能够访问本地文件资源均低于问题中提到的用例。
- 运行 作为来自
soapUI
本身的模拟服务 - 在远程 tomcat 中部署为 war
所以更改了代码(模拟调度程序的脚本)
来自:
def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
至:
def projectPath = new File(mockOperation.mockService.project.path).parent def file = new File(projectPath.+"/${responseFileName}.xml")
Note: file(resource) must be available in the same location where soapui project file is present on the disk i.e., after creatin
.war
file, update.war
file and make sure the required file is placed underWEB-INF/soapui
as that where soapui's project xml is available.