Получение 404 ошибки «Не найдено» из базового запроса Spring Rot Camel REST DSL - PullRequest
0 голосов
/ 21 ноября 2018

Последние несколько дней я работал над базовой демонстрацией Camel и REST DSL, но, наконец, столкнулся с этой проблемой.Я довольно новичок в магии Spring Boot, поэтому любые отзывы очень ценятся!

Когда я запускаю проект, все выглядит так, как будто он запускается правильно для двух моих маршрутов.Однако, когда я пытаюсь выполнить запрос GET, я всегда получаю сообщение 404 «Not Found».

Единственные два класса, которые у меня есть, находятся в одном пакете, поэтому я не верю, что проблема с видимостью.Я создал проект как Spring Start Project и запускаю его как приложение Spring Boot.Журналы показывают, что два маршрута успешно запущены, и Tomcat использует порт 8080. Путь к контексту специально настроен в файле application.properties.

Мой основной класс приложения:

package com.example.demo;

import org.apache.camel.CamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
@Configuration
@ComponentScan("com.example.demo")
public class DemoApplication {

@Autowired
CamelContext camelContext;

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

Мой класс маршрутизатора:

package com.example.demo;

import org.springframework.stereotype.Component;
import org.apache.camel.LoggingLevel;
import org.apache.camel.model.rest.RestBindingMode;
import org.apache.camel.builder.RouteBuilder;   

@Component
public class DemoCamelRouter extends RouteBuilder {
    @Override
      public void configure() throws Exception {

        restConfiguration().component("servlet")
            .bindingMode(RestBindingMode.auto);

        rest().get("/hello")
          .to("direct:hello");

       from("direct:hello")
          .log(LoggingLevel.INFO, "Hello World")
          .transform().simple("Hello World");
       }
}

Мой файл application.properties:

camel.springboot.main-run-controller=true
server.servlet.context-path=/demo

Я тестирую эту службу с использованием http://localhost:8080/demo/hello

Вот зависимости Maven, которые у меня есть.

spring-boot-starter-web (managed:2.1.0.RELEASE)
spring-boot-starter-web-services (managed:2.1.0.RELEASE)
spring-boot-starter-test (managed:2.1.0.RELEASE)
camel-core: 2.22.2
camel-spring-boot-starter: 2.22.2
camel-servlet: 2.22.2
camel-http-common: 2.22.2
javax.servlet-api (managed:4.0.1)

Наконец, вот что показывает журнал.

2018-11-21 00:58:38.454  INFO 11072 --- [           main] o.a.camel.spring.boot.RoutesCollector    : Starting CamelMainRunController to ensure the main thread keeps running
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route2 started and consuming from: direct://hello
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: servlet:/hello?httpMethodRestrict=GET
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 2 routes, of which 2 are started
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.22.2 (CamelContext: camel-1) started in 0.236 seconds
2018-11-21 00:58:38.486  INFO 11072 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '/demo'
2018-11-21 00:58:38.501  INFO 11072 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 3.882 seconds (JVM running for 6.868)
2018-11-21 01:00:12.445  INFO 11072 --- [nio-8080-exec-4] o.a.c.c.C.[Tomcat].[localhost].[/demo]   : Initializing Spring DispatcherServlet 'dispatcherServlet'
2018-11-21 01:00:12.445  INFO 11072 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2018-11-21 01:00:12.453  INFO 11072 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms

1 Ответ

0 голосов
/ 21 ноября 2018

Начиная с версии Camel 2.19, CamelServlet по умолчанию имеет значение «/ camel».Таким образом, ваш URL становится:

http://localhost:8080/demo/camel/hello 

Обновление: вам также нужно будет определить следующий компонент, так как вы используете camel-servlet:

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

Или вместо camel-servlet зависимости,Вы должны добавить camel-servlet-starter зависимость

...