java - 如何使用jboss7.x.1从类路径获取文件

标签 java jboss7.x smooks

我想转换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.

最佳答案

  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");
    

关于java - 如何使用jboss7.x.1从类路径获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633371/

相关文章:

java - 我无法计算平均打字速度(每分钟字符数)

java - 如何在执行测试之前/之后清理 HornetQ 消息日志?

java - JDBC 数据源使用 WEB-INF/lib 中的 jar 文件,而不是创建新的 Jboss 模块

jakarta-ee - 在 jboss-as-7.1.1.Final 中为网页启用热部署

java - 是否可以使用 Smooks 将 NCPDP d.0 映射到 XML?

java - ORMLite 异步操作

java - 如何连接 OSGI 包(通过包发送实体)?

java - 如何在 Hibernate 实体类中使用基于值的类

java - 使用 smooks 将 EDI 消息映射到 XML 时遇到问题

edi - 从java对象准备edi数据