刷新的OSGI Bundle上下文,无法找到Spring NamespaceHandler

时间:2018-07-26 08:47:00

标签: spring mongodb osgi applicationcontext

我需要在运行时刷新我的应用程序上下文。为此,我正在执行以下步骤:
1.在我的OSGI包之外创建新的appliction-context.xml
2.使用
将旧应用ctx复制到新应用中 InputStream inputStream = new BufferedInputStream(this.getClass().getClassLoader().getResourceAsStream("/META-INF/spring/application-context.xml"));
3.刷新应用ctx,这意味着切换到外部捆绑创建的新应用 ApplicationContext ctx = new FileSystemXmlApplicationContext(newCtxPath); ((ConfigurableApplicationContext)ctx).refresh();

但是我得到

  

无法为XML模式名称空间找到Spring NamespaceHandler   [http://www.springframework.org/schema/data/mongo]

 http://www.springframework.org/schema/data/mongo

位于我的application-context.xml内部,我认为这不是问题,因为在编译过程中,一切正常,当我尝试在运行时刷新ctx时出现问题。

编辑# 当然,将旧的ctx文件复制到新文件是成功的,两个文件看起来完全一样。

1 个答案:

答案 0 :(得分:1)

我找到了更简单的解决方案。

public class CtxRefresher implements ApplicationContextAware {

    private ApplicationContext context;

    public void refreshApplicationCtx(){
        ((ConfigurableApplicationContext)context).refresh();        
    }

    @Override
    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        context = ctx;      
    }
}