访问SoapUI中的文件资源模拟服务部署在tomcat中 [英] Accessing file resources in SoapUI Mock Service Deployed in tomcat

查看:589
本文介绍了访问SoapUI中的文件资源模拟服务部署在tomcat中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

简而言之:在 SCRIPT Dispatcher 中访问相对于项目路径的本地文件,即 def file = new File(groovyUtils.projectPath +/ $ {responseFileName} .xml)。当测试从 SoapUI 运行为模拟服务时,正常工作。但是,对已部署的同一测试运行时,对于上述语句( groovyUtils.projectPath ),如果给出空或 (远程tomcat)模拟服务


注意: 相对于 soapui项目xml


,responseFileName 存在于相同的位置(运行SoapUI工具时) blockquote>

关于这个问题的更多细节:

想要在tomcat中部署上述模拟服务。因此,从 SoapUI 使用 Deploy as war 创建了战争,这已创建了 .war 文件。如果 .war 被取消,它将显示以下目录结构。

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

并且存在 soapui项目xml WEB-INF / soapui 目录下。

因为脚本 dispatcher正在使用 groovyUtils.projectPath ,并且 .war 文件没有 responseFile ,使用7zip实用程序在 WEB-INF / soapui 目录下添加必需的responseFile。并在tomcat中部署更新的 .war 文件,这是成功的。


$ b 测试请求被打到部署的模拟服务,它在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:使用脚本无法分派; java.io.FileNotFoundException:\responseFile.xml(系统找不到指定的文件)
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)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
在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)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportVa
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:lve.java:74)org.apache.catalina.core.StandardEngineValve.invoke
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 88)org.apache.catalina.connector.CoyoteAdapter.service($ Co
$) $ b 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)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor $ Wor ker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)




  • 如何在 SCRIPT Dispatcher中引用资源文件它可以同时工作:



    a。在 SoapUI中模拟服务



    b。部署在Tomcat中的模拟服务




顺便说一下,我不确定是否存在

使用:

SoapUI Open Source Edition strong> - 5.2.1



Apache Tomcat - 8.0.5 p>

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

Script Dispatcher



如果您在脚本调度程序中使用 context ,那么不幸的是, servlet上下文工作如下


没有方法的签名:com.eviware.soapui.impl.wsdl.mo ck.WsdlMockRunContext.getResourceAsStream()适用

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

显然,因为SoapUI的API WsdlMockRunContext 没有这样的公共方法。



我相信必须有一个我不知道和希望从社区知道的不同方式。 主要问题是: groovyUtils.projectPath 仅适用于第一个用例,并且为第二个用例获取 nothing



在大量试用&错误和在网上搜索,发现提示在其中一个示例中,以下方法能够访问本问题中提到的使用案例的本地文件资源。




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

  • 在远程tomcat中部署为war



因此,将代码(模拟调度程序的脚本
更改为

 
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)




注意:文件(资源)必须在sam中可用e位置
其中soapui项目文件存在于磁盘上,即在creatin .war 文件之后,更新 .war WEB-INF / soapui 之下,就像 soapui的项目xml可用。



Problem in short : Accessing local file in SCRIPT Dispatcher with respect to project path i.e., def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml"). This is working fine when the test is run from SoapUI as Mock Service. But giving nothing or empty for above statement (groovyUtils.projectPath) when the same test is run against Deployed(remote tomcat) Mock Service.

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

More Details about the problem:

Wanted to deploy the above mock service in tomcat. So, created war using Deploy as war from SoapUI, this has created a .war file. If the .war is extratcted, it shows the following directory structure.

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

And the soapui project xml is present under WEB-INF/soapui directory.

Since, Script dispatcher is using groovyUtils.projectPath, and .war file does not have that responseFile, added the required responseFile under WEB-INF/soapui directory using 7zip utility. And deployed the updated .war file in tomcat which is successful.

When the test request is hit to the deployed mock service, it is showing empty response and the following stacktrace in tomcat's 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)

  • How to refer the resource files in the SCRIPT Dispatcher so that it works in both way:

    a. mock service with in SoapUI

    b. deployed mock service in Tomcat

By the way, I am not sure if there is anything wrong in the way it is done.

Using:

SoapUI Open Source Edition - 5.2.1

Apache Tomcat - 8.0.5

Update: what is already tried apart from mentioned above in the short description

Only the following variables(underlined) are available in Script Dispatcher

And if you use context in Script Dispatcher, unfortunately none of the usual methods for servlet context working such as below

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

Obiviously because, SoapUI's API for WsdlMockRunContext does not have such public methods available.

I believe that there must be a different way which I am not aware and looking to know from the community.

解决方案

The main issue being : groovyUtils.projectPath is working only for first use case, and getting nothing for second use case.

After lot of trial & errors and search on the net, found a hint in one of the samples and the following approach working to be able to access the local file resource both below use cases as mentioned in the question.

  • running as mock service from soapUI itself
  • deployed as war in remote tomcat

So changed the code (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")

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.

这篇关于访问SoapUI中的文件资源模拟服务部署在tomcat中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆