2

Am facing below issue while testing a AWS Lambda function. Its basically a Spring based application, which is trying to create a bean by invoking below code.

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

Issue :

{
  "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 located at enter image description here

Stragely, this works perfectly fine in my local machine, when I run it with a main method.

Jar is created by using maven and setting the Goal as maven package Any help is greatly appreciated.

Thanks

Mark B
  • 183,023
  • 24
  • 297
  • 295
Srivatsa N
  • 2,291
  • 4
  • 21
  • 36

1 Answers1

0

Problem is related to use of maven-shade-plugin.

Some potential fixes are described here : How to create spring-based executable jar with maven?

I got the same problem and fix it by adding the following configuration:

<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>

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

Aly Gueye
  • 1
  • 1