【发布时间】:2014-07-23 17:11:28
【问题描述】:
我有一个通过 java 项目运行的 SoapUI 项目,该项目全部打包到一个 jar 中。该项目通过我的 IDE 解包后运行良好,但在通过命令行运行 jar 时遇到问题。这是导致问题的代码:
SoapUITestCaseRunner runner = new SoapUITestCaseRunner();
ClassLoader cl = MyClass.class.getClassLoader();
runner.setProjectFile(cl.getResource("project.xml").getFile());
runner.run();
run 方法尝试从 jar 中读取 xml 文件时出现问题。我是否有可能从 jar 中获得可以输入到 setProjectFile 方法的路径?我看到其他答案说要使用流,但这种方法只接受字符串。
这是堆栈跟踪:
2014-07-23 12:03:58,384 错误 [errorlog] com.eviware.soapui.support.SoapUIException: 无法从文件 [file:/C:/temp/MyJar.jar!/project.xml 加载项目] com.eviware.soapui.support.SoapUIException:无法从文件 [file:/C:/temp/MyJar.jar!/project.xml] 加载项目 在 com.eviware.soapui.impl.wsdl.WsdlProject.loadProject(WsdlProject.java:315) 在 com.eviware.soapui.impl.wsdl.WsdlProject.(WsdlProject.java:231) 在 com.eviware.soapui.impl.wsdl.WsdlProjectFactory.createNew(WsdlProjectFactory.java:41) 在 com.eviware.soapui.impl.wsdl.WsdlProjectFactory.createNew(WsdlProjectFactory.java:28) 在 com.eviware.soapui.tools.SoapUITestCaseRunner.runRunner(SoapUITestCaseRunner.java:329) 在 com.eviware.soapui.tools.AbstractSoapUIRunner.run(AbstractSoapUIRunner.java:188) 在 CommercialTests.ComTest.doTest(ComTest.java:14) 在 CommercialTests.ServiceTests.main(ServiceTests.java:8) 引起:java.io.FileNotFoundException: C:\temp\MyJar.jar!\project.xml(系统找不到指定的路径) 在 java.io.FileInputStream.open(本机方法) 在 java.io.FileInputStream.(未知来源) 在 java.io.FileInputStream.(未知来源) 在 sun.net.www.protocol.file.FileURLConnection.connect(未知来源) 在 sun.net.www.protocol.file.FileURLConnection.getInputStream(未知来源) 在 java.net.URL.openStream(未知来源) 在 com.eviware.soapui.impl.wsdl.support.wsdl.UrlWsdlLoader.handleFile(UrlWsdlLoader.java:180) 在 com.eviware.soapui.impl.wsdl.support.wsdl.UrlWsdlLoader.load(UrlWsdlLoader.java:116) 在 com.eviware.soapui.impl.wsdl.support.wsdl.UrlWsdlLoader.load(UrlWsdlLoader.java:96) 在 com.eviware.soapui.impl.wsdl.WsdlProject.loadProject(WsdlProject.java:297) ... 7 更多
【问题讨论】:
-
看起来它需要一个本地文件(jarUrl 应该可以工作,否则)...您可能必须先将文件从 jar 中复制出来(可能复制到 tempFile 中),然后指向到那个。
-
你建议我怎么做?
-
而不是将 URL 直接传递给
runner.setProjectFile,而是创建一个新的 tempFile,并将内容写入磁盘,然后将 tempfile 的路径传递给runner.setProjectFile -
它似乎也不喜欢那个选项。我尝试将文件复制到 jar 外的临时文件中,但它无法处理 jar 内的任何类型的路径。
标签: java jar soapui embedded-resource