![](/img/trans.png)
[英]Java Error :“ org.apache.camel.FailedToCreateRouteException: Failed to create route route1”
[英]org.apache.camel.FailedToStartRouteException: Failed to start route route1 because of null
我是 apache 駱駝的新手。 我正在嘗試使用 json,將其轉換為 java 對象並使用管道分隔符將其寫入 CSV 文件中。 但是,在嘗試從另一個 api 的端點使用 json 時出現錯誤。 我正在使用 spring boot 來完成這個任務。
附上我正在嘗試的示例代碼。
@Component
public class HRFeedRoute extends RouteBuilder {
@Override
public final void configure() {
System.out.println("fetching employee details from employee api");
try {
from("http://localhost:8083/getEmployee").startupOrder(1).to("direct:employee")
.log("${body}");
from("direct:employee")
.unmarshal().json(JsonLibrary.Jackson, Employee.class)
.process(
ex -> {
System.out.println(ex);
});
} catch(Error e) {
System.out.println("Error occurred while processing employee data: "+e.getMessage());
}
}
}
org.apache.camel.FailedToStartRouteException: Failed to start route route1 because of null
at org.apache.camel.impl.engine.RouteService.warmUp(RouteService.java:125)
at org.apache.camel.impl.engine.InternalRouteStartupManager.doWarmUpRoutes(InternalRouteStartupManager.java:263)
at org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:156)
at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:114)
at org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:2809)
at org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2657)
at org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2620)
at org.apache.camel.spring.boot.SpringBootCamelContext.doStart(SpringBootCamelContext.java:43)
at org.apache.camel.support.service.BaseService.start(BaseService.java:115)
at org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2452)
at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:121)
at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:157)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:898)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at au.com.macquarie.hr.application.EmployeePackageBootApp.main(EmployeePackageBootApp.java:13)
Caused by: java.lang.UnsupportedOperationException: Cannot consume from http endpoint
錯誤信息的最后一行是關鍵:
Caused by: java.lang.UnsupportedOperationException: Cannot consume from http endpoint
camel-http和camel-http4 (對於 Camel 2.x)只能用作生產者,不能用作消費者。
您需要使用例如可以使用 http 請求的駱駝碼頭。
我找到了答案。 Jetty 將公開一個端點 URL,生產者將使用該 URL 發送 json/message。 所以在producer中添加jetty暴露的end poin url。 在 pom.xml Producer 中添加 camel-jetty-starter 依賴項:假設您知道其余 api 將如何將消息發布到另一個 api。 因此,我只是從控制器共享 postEntity 代碼。
ResponseEntity responseEntity = restTemplate.postForEntity(new URI("http://localhost:8084/employee-package/getEmployee"), request, Employee.class);
消費者 API 路由器:
@Component 公共類 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());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.