我正在Tomcat7上部署Spring 3应用程序。我正在使用OXM unmarshaller所以我需要像这样创建StreamSource:
unmarshaller.unmarshal(new StreamSource(new FileInputStream(dbSetupPath)))
我为dbSetupPath设置了这样的值,它可用于单元测试:
@Value("src/main/resources/db-setup.xml")
String dbSetupPath;
当我在Tomcat上部署时,我收到了FileNotFoundException。什么是正确的路径,以保持我的测试通过和Tomcat工作?我正在部署爆炸:战争atm。
答案 0 :(得分:0)
在tomcat上部署时,所有资源文件夹文件都会进入WEB-INF / classes文件夹中的.war文件。
你需要尝试
@Value("classpath:/db-setup.xml")
因此tomcat将检查类路径中的db-setup.xml
有关更多和适当的详细信息,请参阅
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/new-in-3.html
部分: 2.5.3.1基于Java的bean元数据
答案 1 :(得分:0)
将db-setup.xml与图片
相同
并更改此
@Value("db-setup.xml")
String dbSetupPath;
答案 2 :(得分:0)
我认为您可以指定路径:
$ {webAppRoot} WEB-INF / DB-setup.xml文件
并将db-setup.xml放入WEB-INF文件夹(或创建一些子文件夹)。
另外,为了正确使用此方法,您需要在web.xml中指定这样的参数:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webAppRoot</param-value>
</context-param>
Spring会自动为此参数注入Web应用程序根文件夹的实际路径。
这在我的情况下用于记录,这就是为什么我认为它也适用于你的情况。
答案 3 :(得分:0)
所以我的解决方案是将值注入org.springframework.core.io.Resource而不是像这样的普通String:
@Value("classpath:/db/db-setup.xml")
Resource dbConfig;
然后我访问了底层文件并将其提供给marshaller:
unmarshaller.unmarshal(new StreamSource(dbConfig.getFile());