gpt4 book ai didi

groovy - 在 Tomcat 中部署的 SoapUI Mock 服务中访问文件资源

转载 作者:行者123 更新时间:2023-12-04 07:51:50 27 4
gpt4 key购买 nike

简而言之:访问本地 file脚本调度员 关于项目路径,即 def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml") .这是工作正常当测试从 SoapUI 作为 运行时模拟服务 .但是给nothing or empty当针对 运行相同的测试时,对于上述语句 ( groovyUtils.projectPath )已部署(远程tomcat)模拟服务 .

Note: Here the responseFileName is present in the same location(when running SoapUI tool), relative to the soapui project xml



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

想在tomcat中部署上述模拟服务。因此,使用 创建 war 部署为 war 来自 SoapUI,这创建了一个 .war文件。如果 .war被提取出来,它显示了以下目录结构。

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

soapui project xml位于 WEB-INF/soapui 下目录。

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

当测试请求命中 部署模拟服务 ,它显示 空响应和以下 堆栈跟踪 在 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)
  • 如何引用 SCRIPT 中的资源文件调度程序,以便它以两种方式工作:

    一种。在 SoapUI 中模拟服务

    湾。在 Tomcat 中部署模拟服务

  • 顺便说一句,我不确定它的完成方式是否有任何问题。

    使用:

    SoapUI 开源版 - 5.2.1

    Apache Tomcat - 8.0.5

    更新:除了上述简短描述中已经尝试过的内容

    中只有以下变量(下划线)可用脚本调度员
    enter image description here

    如果您使用 context脚本调度员 ,不幸的是, 的常用方法都没有。 servlet 上下文 工作如下

    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



    显然是因为,SoapUI 的 WsdlMockRunContext 的 API没有这样的公共(public)方法可用。

    我相信一定有一种我不知道并希望从社区中了解的不同方式。

    最佳答案

    主要问题是:groovyUtils.projectPath仅适用于第一个用例,并获得 什么都没有对于第二个用例。

    经过大量的尝试和错误并在网上搜索,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.

    关于groovy - 在 Tomcat 中部署的 SoapUI Mock 服务中访问文件资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835395/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com