java - Camel - 无法访问休息服务

标签 java spring spring-boot apache-camel

我正在通过 spring 和带有嵌入式 tomcat 的 camel boot 运行 camel。 我有一个简单的 Camel 路线,它配置正确并消耗我可以在日志中看到的内容,但是当我尝试访问它时,它使用 localhost:8080/hi 给出 404。

我的路线

 @Component
 public class ServiceRoute extends RouteBuilder {

 @Autowired
 private SampleBean sampleBean;

 @Override
 public void configure() throws Exception {
   from("rest:get:hi").to("bean:sampleBean");
 }
}

我的主类

@Configuration
@SpringBootApplication
@ComponentScan(basePackages = { "routes", "service" },
    excludeFilters = {@ComponentScan.Filter(value = Controller.class,     
    type = FilterType.ANNOTATION)})

public class Application  {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
}

Gradle 依赖项

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'

compile 'org.apache.camel:camel-spring-boot-starter:2.17.0'

compile group: 'org.springframework.boot', name: 'spring-boot-starter-
web', version: '1.4.2.RELEASE'

compile group: 'org.apache.camel', name: 'camel-servlet', version:  
'2.18.1'
}

日志

2016-12-12 12:37:39.860  INFO 24684 --- [           main] root.Application                         : Starting Application on ram.tscpt.local with PID 24684 (/Users/srikanth/emulya/build/classes/main started by srikanth in /Users/srikanth/emulya)
2016-12-12 12:37:39.865  INFO 24684 --- [           main] root.Application                         : No active profile set, falling back to default profiles: default
2016-12-12 12:37:39.979  INFO 24684 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4facf68f: startup date [Mon Dec 12 12:37:39 SAST 2016]; root of context hierarchy
2016-12-12 12:37:41.866  INFO 24684 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.camel.spring.boot.CamelAutoConfiguration' of type [class org.apache.camel.spring.boot.CamelAutoConfiguration$$EnhancerBySpringCGLIB$$a11fb1e5] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2016-12-12 12:37:42.597  INFO 24684 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-12-12 12:37:42.617  INFO 24684 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-12-12 12:37:42.618  INFO 24684 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.5
2016-12-12 12:37:42.756  INFO 24684 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-12-12 12:37:42.756  INFO 24684 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2782 ms
2016-12-12 12:37:42.959  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2016-12-12 12:37:42.983  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-12-12 12:37:42.984  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-12-12 12:37:42.985  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-12-12 12:37:42.985  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2016-12-12 12:37:43.525  INFO 24684 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4facf68f: startup date [Mon Dec 12 12:37:39 SAST 2016]; root of context hierarchy
2016-12-12 12:37:43.651  INFO 24684 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-12-12 12:37:43.653  INFO 24684 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-12-12 12:37:43.703  INFO 24684 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-12-12 12:37:43.707  INFO 24684 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-12-12 12:37:43.778  INFO 24684 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-12-12 12:37:44.557  INFO 24684 --- [           main] o.a.c.i.converter.DefaultTypeConverter   : Loaded 196 type converters
2016-12-12 12:37:44.890  INFO 24684 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-12-12 12:37:44.970  INFO 24684 --- [           main] o.a.camel.spring.boot.RoutesCollector    : Loading additional Camel XML routes from: classpath:camel/*.xml
2016-12-12 12:37:44.973  INFO 24684 --- [           main] o.a.camel.spring.boot.RoutesCollector    : Loading additional Camel XML rests from: classpath:camel-rest/*.xml
2016-12-12 12:37:44.974  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.1 (CamelContext: camel-1) is starting
2016-12-12 12:37:44.976  INFO 24684 --- [           main] o.a.c.m.ManagedManagementStrategy        : JMX is enabled
2016-12-12 12:37:45.548  INFO 24684 --- [           main] o.a.c.i.DefaultRuntimeEndpointRegistry   : Runtime endpoint registry is in extended mode gathering usage statistics of all incoming and outgoing endpoints (cache limit: 1000)
2016-12-12 12:37:45.871  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2016-12-12 12:37:46.023  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: servlet:/hi?httpMethodRestrict=GET
2016-12-12 12:37:46.024  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 1 routes, of which 1 are started.
2016-12-12 12:37:46.026  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.1 (CamelContext: camel-1) started in 1.050 seconds
2016-12-12 12:37:46.147  INFO 24684 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-12-12 12:37:46.157  INFO 24684 --- [           main] root.Application                         : Started Application in 6.985 seconds (JVM running for 7.475)

最佳答案

它不起作用,因为 Camel HTTP Servlet 未注册。 CamelAutoConfiguration 只是启动 camel 上下文。

您需要自己注册 servlet。 camel servlet 的默认名称是 CamelServlet。更改您的 Application 类:

@SpringBootApplication
@ComponentScan(basePackages = { "routes", "service" },
    excludeFilters = {@ComponentScan.Filter(value = Controller.class,     
    type = FilterType.ANNOTATION)})

public class Application  {

    public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new CamelHttpTransportServlet(), "/service/*");
        registration.setName("CamelServlet");
        return registration;
    }
}

然后尝试访问http://localhost/service/hi

顺便说一句,您不需要将 @Configuration 添加到用 @SpringBootApplication 注释的类中。

关于java - Camel - 无法访问休息服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41099262/

相关文章:

java - ListView 问题

java - 这里的 'goal'是什么?

java - 将 Spring Boot 应用程序部署到 Weblogic — Weblogic 尝试将我的主类作为 XML 资源加载,但失败

java - 如何正确计时用 Java Spring MVC 编写的配置文件 API?

java - Spring 的 NoClassDefFoundError

java - 如何在 Spring Data MongoDB 中使用乐观锁定?

java - org.gradle.initialization.DefaultSettings_Decorated 无法转换为 org.gradle.api.internal.project.ProjectInternal

java - Java : Cannot find symbol? [duplicate]

java - 如何用java制作一个 “do not ask me again”的对话框弹出框?

java - 如何在 JSP 中显示来自 MySQL (BLOB) 的图像?