問題在短期:訪問本地file
在SCRIPT調度相對於項目路徑,即def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
。這是工作正常當測試運行從SoapUI爲模擬服務。但是,當針對部署(遠程tomcat)模擬服務運行相同的測試時,給以上陳述(groovyUtils.projectPath
)nothing or empty
。訪問文件資源,在Tomcat中部署
注:這裏
responseFileName
出現在相同的位置(運行了SoapUI工具時),相對於有關的問題soapui project xml
更多詳細信息:
本來是想在tomcat中部署上述模擬服務。因此,使用創建了戰爭從SoapUI,這創建了一個.war
文件。如果.war
被取消,它將顯示以下目錄結構。
└───WEB-INF
├───actions
├───lib
├───listeners
└───soapui
而且soapui project xml
是WEB-INF/soapui
目錄下存在。
因爲,Script
調度使用groovyUtils.projectPath
和.war
文件不具有responseFile
,使用7zip的程序添加所需的responseFile WEB-INF/soapui
目錄下。並在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)
如何在中引用資源文件 210調度員讓它在兩種方式下工作:
a。模擬服務在SoapUI
b。在部署模擬服務的Tomcat
順便說一句,我不知道是否有什麼錯在它完成的方式。
使用:
了SoapUI開源版 - 5.2。1
的Apache Tomcat - 8.0.5
更新:什麼已經嘗試過離開的簡短說明只有
而且,如果您腳本調度使用context
,遺憾的是沒有爲servlet上下文常用方法如下
方法的簽名沒有這樣的工作:com.eviware.soapui.impl.wsdl。 mock.WsdlMockRunContext.getResourceAsStream()是適用
方法的無簽名:com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath()是適用
顯然是因爲,SoapUI的WsdlMockRunContext的API沒有可用的公共方法。
我相信我一定有一種不同的方式,我不知道並希望從社區知道。
也許您需要從SoapUI內部手動訪問該響應文件。 [This](http://stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web-archive)和[this](http:// stackoverflow .com/questions/4340653/file-path-to-resource-in-our-war-web-inf-folder) – user1207289
謝謝@ user1207289。試過這些,不幸的是沒有幫助。如果你看到'Script' Dispatch編輯器的頂部,你會看到可用的變量'context,requestContext,mockOperation,log,mockService'和'context'沒有任何這樣的[methods](https://www.soapui。組織/ apidocs/COM/Eviware那樣/的soapUI/IMPL/WSDL /模擬/ WsdlMockRunContext.html)。 – Rao
不知道我之前是否清楚,只是重申。我的意思是從部署的WS中訪問響應文件。如上文所述,獲取tomcat的'servletContext',然後訪問WEB-INF中的文件。祝你好運。 – user1207289