Spring Boot Camel 应用程序有问题
Problem with Spring Boot Camel application
我对使用 Apache Camel 还是很陌生,我正在尝试改编某人 (https://www.javainuse.com/camel/camel-consume-rest) 提供的示例,以基本上执行与原始应用程序相同的操作,除了使用 Spring 使用 XML 路由配置的 Boot 和 Camel。
我下载了原始应用程序代码(包括 Camel 消费者和 HTTP 服务器)并将它们下载到 运行 并非常容易地正确执行。
现在,我想稍微修改一下应用程序,以便使用 Spring Boot 进行所有幕后配置,并使用 XML DSL 来配置 Camel 路由.原始的 Camel 消费者应用程序根本不使用 Spring。
我进行了似乎有意义的更改,但无法将应用程序提交到 运行。我收到以下异常:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/List; from class org.springframework.boot.SpringApplication
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:418)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:268)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:249)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
at org.test.ApplicationMain.main(ApplicationMain.java:12)
我不明白它在抱怨什么。我在下面包含资源,以便人们可以查看我在做什么。对于代码量,我提前表示歉意。
ApplicationMain.java:
@SpringBootApplication
@ImportResource("classpath:camel-context.xml")
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
Configurer.java:
@Configuration
@ComponentScan("org.test")
public class Configurer {
@Bean
public MyProcessor myProcessor() {
return new MyProcessor();
}
}
application.yml:
---
camel:
springboot:
name: CamelConsumer
main-run-controller: true
驼色-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<import resource="classpath:routes/routes.xml" />
<camelContext id="camel-context" xmlns="http://camel.apache.org/schema/spring">
<routeContextRef ref="routes" />
</camelContext>
</beans>
routes/routes.xml:
注意:我不知道我是否对下面的路由定义中的元素使用了正确的语法。我正在尝试根据 Java DSL 中完成的原始版本对其进行改编。我也不确定我是否需要处理器 bean 定义,因为我也在上面的配置器中定义了这个 bean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="myProcessor" class="org.test.processor.MyProcessor" />
<routeContext id="routes" xmlns="http://camel.apache.org/schema/spring">
<route id="httpTest">
<from uri="file:C:/inboxREST?noop=true" />
<setHeader headerName="HTTP_METHOD">
<simple>GET</simple>
</setHeader>
<to uri="http://localhost:8080/employee?id=5" />
<process ref="myProcessor" />
</route>
</routeContext>
</beans>
MyProcessor.java:
public class MyProcessor implements Processor {
public MyProcessor() {
}
public void process(Exchange exchange) throws Exception {
System.out.println(exchange.getIn().getBody(String.class));
}
}
pom.xml:
注意:您可能会注意到 Spring Boot Camel 启动器以及 Camel 组件(如 HTTP)的 Camel 依赖项的混合。我不清楚我真正需要哪些。 Spring Boot starters 是否不需要包含 Camel 组件依赖项?
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javainuse</groupId>
<artifactId>apache-camel-consume</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath />
</parent>
<properties>
<java.version>1.8</java.version>
<apache-camel-springboot.version>3.1.0</apache-camel-springboot.version>
<apache-camel.version>3.1.0</apache-camel.version>
</properties>
<dependencies>
<!-- Camel BOM -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-dependencies</artifactId>
<version>${apache-camel-springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Camel Starter -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<!-- Camel HTTP -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-http</artifactId>
<version>${apache-camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-http-starter</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<!-- Camel Jackson -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-jackson-starter</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<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>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>2.4.0</version>
</plugin>
</plugins>
</build>
</project>
唉。很难找到问题。
事实证明,我需要清除我的 Maven 存储库 (.m2/repository) 中的依赖项。我认为它们是由 post.
开始时指出的原始项目引入的
然后,我需要编辑 eclipse 项目属性以删除旧的(完全不需要的)jar。完成此操作并完成干净的构建后,应用程序将正常启动。
我对使用 Apache Camel 还是很陌生,我正在尝试改编某人 (https://www.javainuse.com/camel/camel-consume-rest) 提供的示例,以基本上执行与原始应用程序相同的操作,除了使用 Spring 使用 XML 路由配置的 Boot 和 Camel。
我下载了原始应用程序代码(包括 Camel 消费者和 HTTP 服务器)并将它们下载到 运行 并非常容易地正确执行。
现在,我想稍微修改一下应用程序,以便使用 Spring Boot 进行所有幕后配置,并使用 XML DSL 来配置 Camel 路由.原始的 Camel 消费者应用程序根本不使用 Spring。
我进行了似乎有意义的更改,但无法将应用程序提交到 运行。我收到以下异常:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/List; from class org.springframework.boot.SpringApplication
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:418)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:268)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:249)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
at org.test.ApplicationMain.main(ApplicationMain.java:12)
我不明白它在抱怨什么。我在下面包含资源,以便人们可以查看我在做什么。对于代码量,我提前表示歉意。
ApplicationMain.java:
@SpringBootApplication
@ImportResource("classpath:camel-context.xml")
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
Configurer.java:
@Configuration
@ComponentScan("org.test")
public class Configurer {
@Bean
public MyProcessor myProcessor() {
return new MyProcessor();
}
}
application.yml:
---
camel:
springboot:
name: CamelConsumer
main-run-controller: true
驼色-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<import resource="classpath:routes/routes.xml" />
<camelContext id="camel-context" xmlns="http://camel.apache.org/schema/spring">
<routeContextRef ref="routes" />
</camelContext>
</beans>
routes/routes.xml:
注意:我不知道我是否对下面的路由定义中的元素使用了正确的语法。我正在尝试根据 Java DSL 中完成的原始版本对其进行改编。我也不确定我是否需要处理器 bean 定义,因为我也在上面的配置器中定义了这个 bean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="myProcessor" class="org.test.processor.MyProcessor" />
<routeContext id="routes" xmlns="http://camel.apache.org/schema/spring">
<route id="httpTest">
<from uri="file:C:/inboxREST?noop=true" />
<setHeader headerName="HTTP_METHOD">
<simple>GET</simple>
</setHeader>
<to uri="http://localhost:8080/employee?id=5" />
<process ref="myProcessor" />
</route>
</routeContext>
</beans>
MyProcessor.java:
public class MyProcessor implements Processor {
public MyProcessor() {
}
public void process(Exchange exchange) throws Exception {
System.out.println(exchange.getIn().getBody(String.class));
}
}
pom.xml:
注意:您可能会注意到 Spring Boot Camel 启动器以及 Camel 组件(如 HTTP)的 Camel 依赖项的混合。我不清楚我真正需要哪些。 Spring Boot starters 是否不需要包含 Camel 组件依赖项?
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javainuse</groupId>
<artifactId>apache-camel-consume</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath />
</parent>
<properties>
<java.version>1.8</java.version>
<apache-camel-springboot.version>3.1.0</apache-camel-springboot.version>
<apache-camel.version>3.1.0</apache-camel.version>
</properties>
<dependencies>
<!-- Camel BOM -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-dependencies</artifactId>
<version>${apache-camel-springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Camel Starter -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<!-- Camel HTTP -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-http</artifactId>
<version>${apache-camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-http-starter</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<!-- Camel Jackson -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-jackson-starter</artifactId>
<version>${apache-camel-springboot.version}</version>
</dependency>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<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>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>2.4.0</version>
</plugin>
</plugins>
</build>
</project>
唉。很难找到问题。
事实证明,我需要清除我的 Maven 存储库 (.m2/repository) 中的依赖项。我认为它们是由 post.
开始时指出的原始项目引入的然后,我需要编辑 eclipse 项目属性以删除旧的(完全不需要的)jar。完成此操作并完成干净的构建后,应用程序将正常启动。