Java org.apache.camel.FailedToStartRouteException:由于null,无法启动路由route1

Java org.apache.camel.FailedToStartRouteException:由于null,无法启动路由route1,java,spring-boot,apache-camel,Java,Spring Boot,Apache Camel,我是新来的阿帕奇骆驼。我正在尝试使用json,将其转换为java对象,并使用管道分隔符将其写入CSV文件。但是,我在尝试从另一个api的端点使用json时出错。我使用SpringBoot来完成这个任务 附件的样本代码,我正在尝试 @组件 公共类HRFeedRoute扩展RouteBuilder{ @凌驾 公共最终无效配置(){ System.out.println(“从员工api获取员工详细信息”); 试一试{ 从(”http://localhost:8083/getEmployee)。star

我是新来的阿帕奇骆驼。我正在尝试使用json,将其转换为java对象,并使用管道分隔符将其写入CSV文件。但是,我在尝试从另一个api的端点使用json时出错。我使用SpringBoot来完成这个任务

附件的样本代码,我正在尝试

@组件
公共类HRFeedRoute扩展RouteBuilder{
@凌驾
公共最终无效配置(){
System.out.println(“从员工api获取员工详细信息”);
试一试{
从(”http://localhost:8083/getEmployee)。startupOrder(1)至(“直接:员工”)
.log(“${body}”);
发件人(“直接:员工”)
.unmarshal().json(JsonLibrary.Jackson,Employee.class)
.过程(
ex->{
系统输出打印项次(ex);
});
}捕获(错误e){
System.out.println(“处理员工数据时出错:+e.getMessage());
}
}
}
org.apache.camel.FailedToStartRouteException:由于null,无法启动路由route1
位于org.apache.camel.impl.engine.RouteService.warmUp(RouteService.java:125)
位于org.apache.camel.impl.engine.InternalRouteStartupManager.doWarmUpRoutes(InternalRouteStartupManager.java:263)
位于org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:156)
位于org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:114)
位于org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:2809)
位于org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2657)
位于org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2620)
位于org.apache.camel.spring.boot.SpringBootCamelContext.doStart(SpringBootCamelContext.java:43)
位于org.apache.camel.support.service.BaseService.start(BaseService.java:115)
位于org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2452)
位于org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:121)
位于org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:157)
位于org.springframework.context.event.SimpleApplicationEventMulticast.doInvokeListener(SimpleApplicationEventMulticast.java:172)
位于org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
位于org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
位于org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404)
位于org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361)
位于org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:898)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554)
位于org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
位于org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
位于org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
位于org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
位于org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
位于org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
位于org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
位于au.com.macquarie.hr.application.EmployeePackageBootApp.main(EmployeePackageBootApp.java:13)
原因:java.lang.UnsupportedOperationException:无法从http端点使用

错误消息的最后一行是键:

Caused by: java.lang.UnsupportedOperationException: Cannot consume from http endpoint
和(对于Camel 2.x)只能作为生产者使用,而不能作为消费者使用

您需要使用可以使用http请求的示例

我找到了答案。 Jetty将公开一个端点URL,生产者将使用该URL发送json/消息。因此,在producer中添加jetty公开的端点url。 在pom.xml中添加camel-jetty-starter依赖项 制作人: 假设您知道RESTAPI将如何将消息发布到另一个api。因此,我只是从控制器共享postEntity代码

ResponseEntity ResponseEntity=restTemplate.postForEntity(新URI(“http://localhost:8084/employee-包/getEmployee”),请求,Employee.class)

消费者API路由器:

@组成部分 公共类HRFeedRoute扩展RouteBuilder{

@Override
public final void configure() {
    System.out.println("fetching employee details from employee api");
    try {
        
        from("jetty://http://localhost:8084/employee-package/getEmployee")
        .log("${body}")
        .unmarshal().json(JsonLibrary.Jackson, Employee.class)
        .process(
                ex -> {
                    Employee employee = (Employee) ex.getIn().getBody();
                    System.out.println("|"+employee.getEmpId()+" | "+employee.getName()+" | "+employee.getDesignation()+" | "+employee.getSalary());
                });
        
    } catch(Error e) {
        System.out.println("Error occurred while processing employee data: "+e.getMessage());
    }
}

}

查看这篇文章,上面的链接建议使用direct或quartz2。当我使用direct时,它甚至不呼叫路由器。我使用的是ApacheCamel版本3.4.1,但不能使用quartz2。当我使用jettey时,它试图绑定我在端点url中提到的端口,因此出现错误。如果我像下面这样指定url(“jetty:”),我认为它试图运行服务“。我如何使用Jetty消费?你有什么样的代码吗?我找到了答案。我需要使用jetty向生产者公开一个端点,生产者将json发送到这个特定的端点。当我使用jetty时,它试图绑定我在端点url中提到的端口。因此,我得到绑定错误22:40:35.797 | error | o.a.c.I.e.AbstractCamelContext |启动CamelContext(camel-1)时出错,因为引发了异常:java.io.IOException:绑定到本地主机失败/127.0.0.1:8083如果我像t一样指定URL,我想它正在尝试运行服务