2016-01-17 64 views
8

問題在短期:訪問本地fileSCRIPT調度相對於項目路徑,即def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")。這是工作正常當測試運行從SoapUI模擬服務。但是,當針對部署(遠程tomcat)模擬服務運行相同的測試時,給以上陳述(groovyUtils.projectPathnothing or empty訪問文件資源,在Tomcat中部署

注:這裏responseFileName出現在相同的位置(運行了SoapUI工具時),相對於有關的問題soapui project xml

更多詳細信息:

本來是想在tomcat中部署上述模擬服務。因此,使用創建了戰爭SoapUI,這創建了一個.war文件。如果.war被取消,它將顯示以下目錄結構。

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

而且soapui project xmlWEB-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

更新:什麼已經嘗試過離開的簡短說明只有

以下變量(下劃線)是上面提到可在腳本調度員 enter image description here

而且,如果您腳本調度使用context,遺憾的是沒有爲servlet上下文常用方法如下

方法的簽名沒有這樣的工作:com.eviware.soapui.impl.wsdl。 mock.WsdlMockRunContext.getResourceAsStream()是適用

方法的無簽名:com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath()是適用

顯然是因爲,SoapUI的WsdlMockRunContext的API沒有可用的公共方法。

我相信我一定有一種不同的方式,我不知道並希望從社區知道。

+0

也許您需要從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

+0

謝謝@ user1207289。試過這些,不幸的是沒有幫助。如果你看到'Script' Dispatch編輯器的頂部,你會看到可用的變量'context,requestContext,mockOperation,log,mockService'和'context'沒有任何這樣的[methods](https://www.soapui。組織/ apidocs/COM/Eviware那樣/的soapUI/IMPL/WSDL /模擬/ WsdlMockRunContext.html)。 – Rao

+0

不知道我之前是否清楚,只是重申。我的意思是從部署的WS中訪問響應文件。如上文所述,獲取tomcat的'servletContext',然後訪問WEB-INF中的文件。祝你好運。 – user1207289

回答