通过spring inject属性访问,该属性引用一个目录来访问其文件

时间:2014-10-13 14:30:15

标签: java windows spring tomcat osgi

我正在尝试访问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托管系统上访问该属性有什么必要? 有任何想法吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

我不确定你是否走上了正确的道路:

/ WebContent / WEB-INF路径表明您正在编写要在Web容器中运行的Web应用程序。在这种情况下,您应该从不假设您的资源是文件。您应该使用Resource.getInputStream()打开资源,而不是使用URL /文件。原因是应用程序很可能直接从.war运行而没有可用的文件系统。

这可能会立即回答这个问题:Windows 7环境与运行环境相同吗?我的印象是它不是。如果你将项目捆绑到一个捆绑罐中,同时将它运送到windows机器,我想你应该在路径中添加一个前缀(但可能需要关闭WebContent),比如bundle:,classpath:等等。参见{{ 3}}参考。但是你需要提供更多信息以确定。