我正在尝试访问bean中定义的属性,如下所示:
<bean id="reportdepositService" class="a.b.c.ServiceImpl">
<property name="reportDeposit" value="/WebContent/WEB-INF/dirName/" />
</bean>
ServiceImpl类看起来像这样:
public class ServiceImpl implements IService {
private Resource springResource;
public Resource getSpringResource() {
return springResource;
}
public void setSpringResource(Resource springResource) {
this.springResource = springResource;
}
private File getSpringResourceFile() throws IOException{
Resource r = getSpringResource();
URL url = FileLocator.resolve(r.getURL());
return FileUtils.toFile(url);
}
public void doSomething(){
.. some logic .
File f = getSpringResourceFile();
}
在ubuntu机器上的eclipse中执行该代码工作正常,jenkins上的应用程序构建在ubuntu上运行良好。在win7 / 64上运行该应用程序,代码抛出以下异常:
OSGi resource[/WebContent/WEB-INF/springResource/|bnd.id=332|bnd.sym=a.b.server] cannot be resolved to URL because it does not exist
java.io.FileNotFoundException: OSGi resource[/WebContent/WEB-INF/springResource/|bnd.id=332|bnd.sym=a.b.server] cannot be resolved to URL because it does not exist
at org.springframework.osgi.io.OsgiBundleResource.getURL(OsgiBundleResource.java:228)
在Windows托管系统上访问该属性有什么必要? 有任何想法吗? 提前致谢
答案 0 :(得分:0)
我不确定你是否走上了正确的道路:
/ WebContent / WEB-INF路径表明您正在编写要在Web容器中运行的Web应用程序。在这种情况下,您应该从不假设您的资源是文件。您应该使用Resource.getInputStream()
打开资源,而不是使用URL /文件。原因是应用程序很可能直接从.war运行而没有可用的文件系统。
这可能会立即回答这个问题:Windows 7环境与运行环境相同吗?我的印象是它不是。如果你将项目捆绑到一个捆绑罐中,同时将它运送到windows机器,我想你应该在路径中添加一个前缀(但可能需要关闭WebContent),比如bundle:,classpath:等等。参见{{ 3}}参考。但是你需要提供更多信息以确定。