Hi

Could this be a bug in the dependency chain required for a Camel SB App with 
XML-DSL?

I get the following exception as trying to upgrade from 3.7.4 to 3.11.0 
(running on JDK 11). This happens the same no matter if I run the tests or try 
to boot up the App locally with "mvn spring-boot:run” command:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: 
Configuration problem: Failed to import bean definitions from URL location 
[classpath:spring/camel.xml]
Offending resource: class path resource [spring/cxf.xml]; nested exception is 
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected 
exception parsing XML document from class path resource [spring/camel.xml]; 
nested exception is java.lang.NoClassDefFoundError: 
org/apache/camel/spi/ExpressionFactoryAware
        at 
org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:72)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:119)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:104)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:240)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:191)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:176)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:149)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:96)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:511)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:338)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromImportedResources$0(ConfigurationClassBeanDefinitionReader.java:390)
 ~[spring-context-5.3.8.jar:5.3.8]
        at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) 
~[na:na]
        at 
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:354)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:156)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:129)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:343)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
 ~[spring-context-5.3.8.jar:5.3.8]
        at 
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
 ~[spring-boot-2.5.1.jar:2.5.1]
        at 
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) 
~[spring-boot-2.5.1.jar:2.5.1]
        at 
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
 ~[spring-boot-2.5.1.jar:2.5.1]
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:338) 
~[spring-boot-2.5.1.jar:2.5.1]
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) 
~[spring-boot-2.5.1.jar:2.5.1]
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) 
~[spring-boot-2.5.1.jar:2.5.1]
        at com.foo.Application.main(Application.java:15) ~[classes/:na]
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: 
Unexpected exception parsing XML document from class path resource 
[spring/camel.xml]; nested exception is java.lang.NoClassDefFoundError: 
org/apache/camel/spi/ExpressionFactoryAware
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:417)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:338)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:234)
 ~[spring-beans-5.3.8.jar:5.3.8]
        ... 29 common frames omitted
Caused by: java.lang.NoClassDefFoundError: 
org/apache/camel/spi/ExpressionFactoryAware
        at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) 
~[na:na]
        at 
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
 ~[na:na]
        at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) 
~[na:na]
        at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) 
~[na:na]
        at 
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
 ~[na:na]
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
 ~[na:na]
        at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) 
~[na:na]
        at javax.xml.bind.ModuleUtil.findFirstByJaxbIndex(ModuleUtil.java:101) 
~[jakarta.xml.bind-api-2.3.3.jar:2.3.3]
        at 
javax.xml.bind.ModuleUtil.getClassesFromContextPath(ModuleUtil.java:63) 
~[jakarta.xml.bind-api-2.3.3.jar:2.3.3]
        at javax.xml.bind.ContextFinder.find(ContextFinder.java:280) 
~[jakarta.xml.bind-api-2.3.3.jar:2.3.3]
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:478) 
~[jakarta.xml.bind-api-2.3.3.jar:2.3.3]
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:435) 
~[jakarta.xml.bind-api-2.3.3.jar:2.3.3]
        at 
org.apache.camel.xml.jaxb.DefaultModelJAXBContextFactory.newJAXBContext(DefaultModelJAXBContextFactory.java:39)
 ~[camel-xml-jaxb-3.11.0.jar:3.11.0]
        at 
org.apache.camel.spring.xml.handler.CamelNamespaceHandler.getJaxbContext(CamelNamespaceHandler.java:187)
 ~[camel-spring-xml-3.11.0.jar:3.11.0]
        at 
org.apache.camel.spring.xml.handler.CamelNamespaceHandler$CamelContextBeanDefinitionParser.doParse(CamelNamespaceHandler.java:379)
 ~[camel-spring-xml-3.11.0.jar:3.11.0]
        at 
org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:88)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:63)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1391)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1371)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:179)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:149)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:96)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:511)
 ~[spring-beans-5.3.8.jar:5.3.8]
        at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
 ~[spring-beans-5.3.8.jar:5.3.8]
        ... 34 common frames omitted
Caused by: java.lang.ClassNotFoundException: 
org.apache.camel.spi.ExpressionFactoryAware
        at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
 ~[na:na]
        at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) 
~[na:na]
        ... 70 common frames omitted


The relevant dependencies I’ve got in place are:

<properties>

  <!-- Dependency Versions -->
  <camel-version>3.11.0</camel-version>
  <cxf-version>3.4.4</cxf-version>
  <spring-boot-version>2.5.1</spring-boot-version>
  <xercesImpl-version>2.12.1</xercesImpl-version>

...
</properties>
...
<dependencyManagement>
  <dependencies>

    <!-- Spring Boot BOM -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring-boot-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>

    <!-- Camel BOM -->
    <dependency>
      <groupId>org.apache.camel.springboot</groupId>
      <artifactId>camel-spring-boot-bom</artifactId>
      <version>${camel-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>

  <!-- Spring Boot -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>

  <!-- Camel Spring Boot -->
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-cxf-starter</artifactId>
    <version>${cxf-version}</version>
  </dependency>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-direct-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-file-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-http-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-log-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot-xml-starter</artifactId>
  </dependency>

  <!-- CXF Spring Boot -->
  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>${cxf-version}</version>
  </dependency>

  <!-- CXF -->
  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-ws-security</artifactId>
    <version>${cxf-version}</version>
  </dependency>

  <!-- Testing -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-test-spring-junit5</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.awaitility</groupId>
    <artifactId>awaitility</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.xmlunit</groupId>
    <artifactId>xmlunit-matchers</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>${xercesImpl-version}</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-servlet-starter</artifactId>
    <version>${camel-version}</version>
    <scope>test</scope>
  </dependency>
</dependencies>

And with that I think I have the following required change in place.

https://camel.apache.org/manual/latest/camel-3x-upgrade-guide-3_9.html#_modularized_camel_spring
 
<https://camel.apache.org/manual/latest/camel-3x-upgrade-guide-3_9.html#_modularized_camel_spring>

Thanks, Babak

Reply via email to