【问题标题】:FileNotFoundException..Classpath resource not found in spring OSGI jar在 Spring OSGI jar 中找不到 FileNotFoundException..Classpath 资源
【发布时间】:2014-02-15 02:50:59
【问题描述】:

我创建了一个示例 osgi 插件并将其部署在 WSO2-ESB 容器中。
现在我想在 osgi bundle 中使用 Spring 进行 bean 管理。所以我创建了一个 spring-beans.xml 文件,如下所示。

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.2.xsd">


    <!--  Add DAO Impl bean entry here and Add bean reference as required -->
    <bean id="xyzDAO" class="x.y.z.ABCImpl">
    </bean>

    <!-- Add Service Impl bean entry here and attach DAO reference -->
    <bean id="abcService" class="x.y.z.ABCServiceImpl">
        <property name="xyzDAO" ref="xyzDAO"/>
    </bean>

然后我创建了一个类并使用 ClassPathXmlApplicationContext 来加载 xml 文件,如下所示

ApplicationContext appContext = new ClassPathXmlApplicationContext("spring-beans.xml");

我从 BundleActivator 调用了这个类,它在捆绑包启动时运行。
当我将此插件部署到 [WSO2-HOME]/repository/components/dropins/ 时,出现以下异常。

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring-beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring-beans.xml] cannot be opened because it does not exist
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at com.mi.mts.userprofile.spring.test.util.SpringUtil.setApplicationContext(SpringUtil.java:17)
        at com.mi.mts.userprofile.spring.test.activator.Activator.start(Activator.java:42)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
        at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
        at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
        at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
Caused by: java.io.FileNotFoundException: class path resource [spring-beans.xml] cannot be opened because it does not exist
        at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
        ... 29 more

当我从 Eclipse 运行这个插件时,它运行顺利。
我无法弄清楚为什么会发生这种情况。如果您有任何建议或解决方案,请告诉我,以便我解决。
提前致谢。

【问题讨论】:

    标签: spring osgi classpath wso2esb


    【解决方案1】:

    而不是部署到 [WSO2-HOME]/repository/components/dropins,

    在 [WSO2-HOME]/repository/components/lib 中部署。

    必须重新启动服务器并再次检查。

    还要检查this

    【讨论】:

    • 它本身就是一个 OSGI 包,因此无需将其部署在 [WSO2-HOME]/repository/components/lib 中。
    • "component/lib" 不是解决方案 - 它总是需要重新启动!我们想在不重新启动的情况下添加包 (.jar)。
    【解决方案2】:

    您需要解决 Spring 的类路径问题。查看this related question的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2014-03-22
      • 2014-11-01
      • 1970-01-01
      • 2018-01-06
      • 2014-08-21
      • 2016-10-23
      相关资源
      最近更新 更多