Java 无法访问jboss 7.1.1中资源的数据流

Java 无法访问jboss 7.1.1中资源的数据流,java,jboss7.x,smooks,Java,Jboss7.x,Smooks,我正在使用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/smo

我正在使用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>

萨克斯
module.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.io.IOException:无法访问资源[/WEB-INF/smooks config.xml]的数据流。试过(按顺序):
10:10:14113错误[stderr](http-localhost-127.0.0.1-8080-2)文件系统:E:\WEB-INF\smooks-config.xml
10:10:14114错误[stderr](http-localhost-127.0.0.1-8080-2)文件系统:E:\jboss-as-7.1.1.Final\bin\WEB-INF\smooks-config.xml
10:10:14117错误[stderr](http-localhost-127.0.0.1-8080-2)类路径:/WEB-INF/smooks-config.xml
10:10:14125错误[stderr](http-localhost-127.0.0.1-8080-2)
10:10:14126 org.milyn.resource.URIResourceLocator.getResource(URIResourceLocator.java:130)上的错误[stderr](http-localhost-127.0.0.1-8080-2)
10:10:14128 org.milyn.resource.URIResourceLocator.getResource(URIResourceLocator.java:84)上的错误[stderr](http-localhost-127.0.0.1-8080-2)
10:10:14129 org.milyn.Smooks.addConfigurations(Smooks.java:307)上的错误[stderr](http-localhost-127.0.0.1-8080-2)
10:10:14131 org.milyn.Smooks上的错误[stderr](http-localhost-127.0.0.1-8080-2)(Smooks.java:151)
10:10:14133错误[stderr](http-localhost-127.0.0.1-8080-2)位于com.manam.mobee.customer.MobeeCustomerHome.runSmooksTransform(MobeeCustomerHome.java:644)

我对smooks知之甚少,但我猜它是在使用它的类加载器尝试在发送它的路径上查找资源。由于模块中有Smook,因此它使用自己的
ModuleClassLoader
,无法查看用于部署的类加载器中的内容。最好使用
java.io.InputStream
构造函数


如果您是从一个servlet运行这个,那么您可以使用
javax.servlet.ServerContext.getResourceAsStream(“WEB-INF/smokes config.xml”)

我对smooks知之甚少,但我猜它是在使用它的类加载器尝试在发送它的路径上查找资源。由于模块中有Smook,因此它使用自己的
ModuleClassLoader
,无法查看用于部署的类加载器中的内容。最好使用
java.io.InputStream
构造函数


如果您是从一个servlet运行此程序,那么可以使用
javax.servlet.ServerContext.getResourceAsStream(“WEB-INF/smokes config.xml”)

您需要更改此部分中的相对路径:
Smooks-Smooks=new-Smooks(“/WEB-INF/Smooks-config.xml”)
到绝对路径:)

您需要更改此部分中的相对路径:
Smooks-Smooks=new-Smooks(“/WEB-INF/Smooks-config.xml”)
到绝对路径:)

在Smooks-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模块类加载器将无法在部署类路径上找到配置文件;它加载访问路径。因为他们使用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模块类加载器将无法在部署类路径上找到配置文件。