【问题标题】:Failed to access data stream for resource in jboss 7.1.1无法访问 jboss 7.1.1 中资源的数据流
【发布时间】:2013-03-20 07:16:41
【问题描述】:

我正在使用 smooks api 进行 java-xml 和 xml-java 转换。此代码在 jboss4.2.2 中工作,但迁移 jboss7.1.1 时出现异常是“无法访问资源数据流”

示例代码:

private String runSmooksTransform(Object inputJavaObject)
        throws IOException, SAXException {
              Smooks smooks = new Smooks("/WEB-INF/smooks-config.xml");
            try {
        ExecutionContext executionContext = smooks.createExecutionContext();
        StringWriter writer = new StringWriter();

        smooks.filterSource(executionContext,
                new org.milyn.payload.JavaSource(inputJavaObject),
                new StreamResult(writer));

        return writer.toString();
        } finally {
        smooks.close();
         }
         }

smooks-config.xml

<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd" >

    <resource-config selector="global-parameters">
        <param name="stream.filter.type">SAX</param>
    </resource-config>


</smooks-resource-list>

模块.xml

<module xmlns="urn:jboss:module:1.1" name="org.milyn">
  <resources>
    <resource-root path="milyn-smooks-all-1.4.jar"/>
</resources>

 <dependencies>
   <module name="javax.api"/>
  <module name="org.apache.commons.logging" />
  <module name="org.jaxen" />
   <module  name="org.hibernate" slot="3" />

  </dependencies>
</module>

例外:

 java.io.IOException: Failed to access data stream for resource [/WEB-INF/smooks-config.xml]. Tried (in order):
10:10:14,113 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   File System: E:\WEB-INF\smooks-config.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\smooks-config.xml
10:10:14,117 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   Classpath: /WEB-INF/smooks-config.xml
10:10:14,125 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) 

10:10:14,126 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   at org.milyn.resource.URIResourceLocator.getResource(URIResourceLocator.java:130)

10:10:14,128 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   at org.milyn.resource.URIResourceLocator.getResource(URIResourceLocator.java:84)

10:10:14,129 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   at org.milyn.Smooks.addConfigurations(Smooks.java:307)

10:10:14,131 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   at org.milyn.Smooks.<init>(Smooks.java:151)

10:10:14,133 ERROR [stderr] (http-localhost-127.0.0.1-8080-2)   at com.manam.mobee.customer.MobeeCustomerHome.runSmooksTransform(MobeeCustomerHome.java:644)

【问题讨论】:

    标签: java jboss7.x smooks


    【解决方案1】:

    我对 smooks 了解不多,但我猜它正在使用它的类加载器来尝试在您发送它的路径中查找资源。由于您在模块中有 smooks,它使用它自己的 ModuleClassLoader 无法看到您的部署的类加载器中的内容。最好使用java.io.InputStream 构造函数。

    如果您从 servlet 运行它,您可以使用 javax.servlet.ServerContext.getResourceAsStream("WEB-INF/smokes-config.xml")

    【讨论】:

    • In Smooks Smooks smooks = new Smooks(resourceURI);它加载了他们使用 InpuStream 的访问路径。
    • 是的,但我认为您需要提供 InputStream。模块 (org.milyn) 可能正在使用 Thread.currentThread().getContextClassLoader().getResourceAsStream(),这可能不起作用。
    • 默认 smooks 接受此路径 E:\jboss-as-7.1.1.Final\bin\WEB-INF\smooks-config.xml ,我应该如何更改 /WEB 的运行时路径-INF/smooks-config.xml ?
    • 我试过 smooks.getClassLoader().getResourceAsStream("/WEB-INF/smooks-config.xml");它无法获得空值。
    • 由于smooks-config.xml 在您的部署类路径中,您需要从部署类加载器获取配置文件。 smooks 模块类加载器将无法在您的部署类路径上找到配置文件。
    【解决方案2】:

    这部分需要把相对路径:Smooks smooks = new Smooks("/WEB-INF/smooks-config.xml")改成绝对路径:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多