question:
I want to convert smooks xml-java, so that i need to load source file from mobeeadmin.war/WEB-INF/sample.xml
.
Smooks smooks = new Smooks("/WEB-INF/sample.xml");
It is throwing following exception:
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.
answer:
- What Smooks takes as a String is a file name. If you take a relative one it‘s interpreted relative to the start location of your java application. But of course you could take an absolute one too. So
E:/data/sample.xml
should just work fine. - /WEB-INF/sample.xml can‘t be on the classpath, as WEB-INF then would be a package name. But those must not contain dashes. In fact it‘s a resource file of your web application and you can get a stream to load it by
ServletContext.getResourceAsStream(java.lang.String path)
. As JBoss7 is Servlet 3.0 compilant you can get the ServletContext from the HttpServletRequest. However some modern Frameworks give you neither. - If you‘d like to get your file from the class path you could move it to WEB-INF/classes and load it via a classloader. However, java is pretty picky with the right one. Most reliable is the ContextClassloader (it‘s now in the root package):
Thread.currentThread().getContextClassLoader().getResourceAsStream("sample.xml");
reference from:http://stackoverflow.com/questions/15633371/how-to-get-file-from-classpath-using-jboss7-x-1
时间: 2024-11-19 08:15:53