1

我想转换 smooks xml-java,所以我需要从 mobeeadmin.war/WEB-INF/sample.xml.

Smooks smooks = new Smooks("/WEB-INF/sample.xml");

它抛出以下异常:

    java.io.IOException: Failed to access data stream for resource [/WEB-INF/sample.xml]. Tried (in order):
    10:10:14,113 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   File System: E:\WEB-INF\sample.xml
    10:10:14,114 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   File System: E:\jboss-as-7.1.1.Final\bin\WEB-INF\sample.xml
    10:10:14,117 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   Classpath: /WEB-INF/sample.xml
    10:10:14,125 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)

By default it looks in File System: E:\jboss-as-7.1.1.Final\bin\WEB-INF\sample.xml .I want load from E:\jboss-as-7.1.1.Final\standalone\deployments\myproject.war\WEB-INF\sample.xml.
4

1 回答 1

0
  1. Smooks 将字符串作为文件名。如果你取一个相对的,它会被解释为相对于你的 java 应用程序的起始位置。当然,你也可以选择绝对的。所以E:/data/sample.xml应该可以正常工作。
  2. /WEB-INF/sample.xml 不能在类路径上,因为 WEB-INF 将是一个包名。但那些不能包含破折号。实际上,它是您的 Web 应用程序的资源文件,您可以通过ServletContext.getResourceAsStream(java.lang.String path). 由于 JBoss7 是 Servlet 3.0 编译器,您可以从 HttpServletRequest 获取 ServletContext。然而,一些现代框架都没有给你。
  3. 如果您想从类路径中获取文件,可以将其移动到 WEB-INF/classes 并通过类加载器加载它。但是,java 对正确的选择非常挑剔。最可靠的是 ContextClassloader(它现在在根包中):

         Thread.currentThread().getContextClassLoader().getResourceAsStream("sample.xml");
    
于 2013-03-26T17:02:21.183 回答