Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 访问tomcat中部署的SoapUI模拟服务中的文件资源_Groovy_Mocking_Soapui_Tomcat8 - Fatal编程技术网

Groovy 访问tomcat中部署的SoapUI模拟服务中的文件资源

Groovy 访问tomcat中部署的SoapUI模拟服务中的文件资源,groovy,mocking,soapui,tomcat8,Groovy,Mocking,Soapui,Tomcat8,问题简而言之:访问脚本调度程序中的本地文件中与项目路径有关的文件,即def file=new file(groovyUtils.projectPath+“/${responseFileName}.xml”)。当测试作为模拟服务从SoapUI运行时,工作正常。但是当对部署的(远程tomcat)模拟服务运行相同的测试时,为上述语句(groovyUtils.projectPath)提供nothing或empty 注意:这里的responseFileName与SoapUI项目xml 有关该问题的更多详细

问题简而言之:访问脚本调度程序中的本地
文件
中与项目路径有关的文件,即
def file=new file(groovyUtils.projectPath+“/${responseFileName}.xml”)
。当测试作为模拟服务从SoapUI运行时,工作正常。但是当对部署的(远程tomcat)模拟服务运行相同的测试时,为上述语句(
groovyUtils.projectPath
)提供
nothing或empty

注意:这里的
responseFileName
SoapUI项目xml

有关该问题的更多详细信息:

def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml") def projectPath = new File(mockOperation.mockService.project.path).parent def file = new File(projectPath.+"/${responseFileName}.xml") 希望在tomcat中部署上述模拟服务。因此,使用SoapUI中的部署为war创建了war,这创建了一个
.war
文件。如果
.war
是extracted,它将显示以下目录结构

└───WEB-INF
├───行动
├───解放党
├───听众
└───索皮
soapui项目xml
位于
WEB-INF/soapui
目录下

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

当测试请求被命中到部署的模拟服务时,它将在tomcat的catalina.out中显示空响应和以下堆栈跟踪:

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)
  • 如何引用
    脚本中的资源文件
    Dispatcher,使其以两种方式工作:

    a。SoapUI中的模拟服务

    b。在Tomcat中部署模拟服务

顺便说一句,我不确定这样做是否有什么错误

使用:

SoapUI开源版-5.2.1

Apache Tomcat-8.0.5

更新:除了上述简短描述外,还尝试了哪些功能

脚本调度程序中只有以下变量(带下划线)可用

如果在脚本调度程序中使用
上下文
,不幸的是,servlet上下文的常用方法没有一个像下面这样工作

方法com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getResourceAsStream()的签名不适用

方法com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath()的签名不适用

显然是因为,SoapUI的API没有这样的公共方法可用


我相信一定有一种不同的方式,我不知道,也不想从社区中了解。

主要问题是:
groovyUtils.projectPath
只在第一个用例中工作,而在第二个用例中什么也得不到

经过大量的尝试和错误,并在网上搜索,在其中一个样本和以下的方法工作,以能够访问本地文件资源都下面的用例中提到的问题

  • 作为模拟服务从
    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") def file=新文件(groovyUtils.projectPath+“/${responseFileName}.xml”) 至:

def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml") def projectPath = new File(mockOperation.mockService.project.path).parent def file = new File(projectPath.+"/${responseFileName}.xml") def projectPath=新文件(mockOperation.mockService.project.path).parent def file=新文件(projectPath.+“/${responseFileName}.xml”) 注意:文件(资源)必须位于同一位置 如果磁盘上存在soapui项目文件,即在创建
.war
文件后,更新
.war
文件,并确保所需文件与soapui项目xml所在的位置一样放置在
WEB-INF/soapui


也许您需要从SoapUI中手动访问该响应文件。谢谢@user1207289。尝试过这些,但不幸的是没有帮助。如果在
Script
Dispatch editor顶部看到,您将看到可用的变量
context、requestContext、mockOperation、log、mockService
,而
context
没有任何此类变量。我不确定之前是否清楚,因此只需重复。我的意思是从部署的WS中访问响应文件。获得tomcat
servletContext
,然后访问WEB-INF中的文件,如上述文章所述。祝你好运。嗯,这就是我正在寻找的,并用已经尝试过的内容更新了问题。但模拟是在脚本中完成的,用户对soapUI提供的变量的访问受到限制