当前位置: 首页 > 知识库问答 >
问题:

无法从WAR应用程序中的JAR文件加载BeanIO映射

东门楚
2023-03-14

我有一个应用程序加载它的Spring上下文与XML配置。

上下文文件存储在jar的类路径中(在META-INF/Context目录中)。

通过引入一个新bean,我想从同一存档的类路径中加载一个beanio映射文件。由于Tomcat在Eclipse中运行,这一切都很有吸引力,但当我将WAR文件部署到QA环境时,应用程序无法启动。

让我走代码:

public class BeanIoParser implements Parser, Iterator<Message>, InitializingBean
{
    private StreamFactory streamFactory;

    private Resource resourceMapping; //Injected via Context

    @Override
    public void afterPropertiesSet() throws Exception
    {
        streamFactory = StreamFactory.newInstance();
        streamFactory.load(resourceMapping.getFile()); //boom here
    }
}

然后是背景

<bean id="messagesParser" class="it.acme.BeanIoParser" scope="prototype">
    <property name="resourceMapping" value="classpath:META-INF/mappings/messages-beanio.xml" />
</bean>

然后呢?嗯...我已经通过首先解压war文件来双重检查构建的jar文件。都匹配。

我可以看到我的消息beanio。xml文件是否正确。

但当我启动应用程序时,我得到了以下根本原因:

我还尝试了另一种方法,使用classpath*(因为我们在从多个jar文件加载Spring上下文时已经遇到了这个问题)

所以如果我的豆子宣言变成了

<property name="resourceMapping" value="classpath*:META-INF/mappings/messages-beanio.xml" />    

我的错误变成了

我该怎么修理?

共有1个答案

姬衡
2023-03-14

以不同的方式解决。我以编程方式实例化ClasspathResource,路径以META-INF开头,而不是classpath:

 类似资料:
  • 问题内容: 我在以下情况下有一个关于保证的问题(请注意,问题不是 “如何以其他方式做到这一点?” ,实际上是关于以下情况下的类加载顺序)更好地了解类加载的工作原理)。 这是一个假设的场景…一个 .war 文件具有以下(部分)目录结构: 两个 Bunny.class 文件均已导入,并引用了 acme.jar中的 其他类。 __ Bunny.class 在 WEB-INF /班/ … 是具有相同的名称

  • 我有一个基于war的SpringWeb应用程序项目,该项目内部有多个jar文件。我正在使用maven设置来构建JAR和war文件。每个jar文件都有一组需要加载的bean,我不能这样做。 在每个jar文件中,我都定义了一个beans.xml文件。但是豆子不会自动上膛。我尝试加载beans.xml文件:a)src/main/Resources b)src/main/Resources/META-IN

  • 问题内容: 我需要从罐子中加载属性文件。该罐子包含在war文件中。这是结构 现在,我在一个servlet中编写了以下代码,如下所示: 但是上面的代码我得到流为空。如果我将属性文件放在ROOT.war / WEB- INF中,则可以正常工作。我有一个不错的主意,如果getResourceAsStream中的路径以“ /”开头,那么它将在上下文根目录中搜索资源。但是,如何读取位于jar的资源,该jar

  • 我正在处理一个Spring Boot应用程序,其中我使用该应用程序公开SOAP WebService。我在Spring boot应用程序中使用Apache CFX framework for SOAP impl。我正在使用基于注释的方法。 我在一个bean中的Spring Boot配置文件中设置应用程序上下文时遇到了问题。下面是我的代码。 配置文件如下所示。 现在我有了bean SOAPproce

  • 我无法加载位于jar (project.service.jar)中的db.properties,它被war文件(project-web.war)引用。输出war将jar放在we b-INF/lib/project . service . jar中。rest war也使用jar,它使用jar中的一些服务。当战争开始时,我无法加载位于服务的jar文件中的db.properties。prop文件具有要在