【问题标题】:AWS lambda - Unable to locate NamespaceHandler for XML schemaAWS lambda - 无法找到 XML 架构的 NamespaceHandler
【发布时间】:2023-03-10 06:03:01
【问题描述】:

在测试 AWS Lambda 函数时遇到以下问题。它基本上是一个基于 Spring 的应用程序,它试图通过调用下面的代码来创建一个 bean。

private static ApplicationContext getSpringContext() {
        if (springContext == null) {
            synchronized (ApplicationContext.class) {
                if (springContext == null) {
                    springContext = new ClassPathXmlApplicationContext("config/application-context.xml");
                }
            }
        }

问题:

{
  "errorMessage": "Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]\nOffending resource: class path resource [config/application-context.xml]\n",
  "errorType": "org.springframework.beans.factory.parsing.BeanDefinitionParsingException",
  "stackTrace": [
    "org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)",
    "org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)",
    "org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)",
    "org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:315)",
    "org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1429)",
    "org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1422)",
    "org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187)",
    "org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:147)",
    "org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:101)",
    "org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:495)",
    "org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)",
    "org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)",
    "org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)",
    "org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)",
    "org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)",
    "org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)",
    "org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)",
    "org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)",
    "org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)",
    "org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)",
    "org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:539)",
    "org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)",
    "org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)",
    "org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)",
    "com.thermofisher.synbio.app.controller.Application.getSpringContext(Application.java:13)",
    "com.thermofisher.synbio.app.controller.Application.getBean(Application.java:21)",
    "com.thermofisher.synbio.app.controller.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:15)",
    "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
    "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
    "java.lang.reflect.Method.invoke(Method.java:498)"
  ]
}

application-context.xml 位于

奇怪的是,当我使用 main 方法运行它时,这在我的本地机器上运行得非常好。

Jar 是通过使用 maven 并将 Goal 设置为 maven 包创建的 任何帮助是极大的赞赏。

谢谢

【问题讨论】:

    标签: java spring amazon-web-services aws-lambda


    【解决方案1】:

    问题与使用maven-shade-plugin有关。

    此处描述了一些潜在的修复方法: How to create spring-based executable jar with maven?

    我遇到了同样的问题并通过添加以下配置来解决它:

    <configuration>
      <transformers>
        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
          <resource>META-INF/spring.handlers</resource>
        </transformer>
        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
          <resource>META-INF/spring.schemas</resource>
        </transformer>
      </transformers>
    </configuration>
    

    说明:https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 2011-03-21
      • 2014-12-30
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多