Как сделать почтовый запрос в Apache Camel Rest

Я новый apache rest dsl с весенней загрузкой, внес следующие изменения

Основной класс

package com.javaoutofbounds.pojo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"com.ccs.batchfile"})
public class BatchFileApplication {

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

Класс обслуживания

package com.ccs.batchfile.service;

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

@Component
public class BatchFileService extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        restConfiguration().component("servlet").bindingMode(RestBindingMode.json);
        rest("/batchFile").consumes("application/json").produces("application/json").get("/routeStart").to("direct:startRoute");
    }

}

Класс маршрута

package com.ccs.batchfile.routes;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.ccs.batchfile.processor.StartRouteProcessor;

@Component
public class StartRoute  extends RouteBuilder{

     @Autowired
     private StartRouteProcessor startRouteProcessor;

    @Override
    public void configure() throws Exception {
        from("direct:startRoute").log("Inside StartRoute")
        .process(startRouteProcessor);
    }

}

Класс процессора

package com.ccs.batchfile.processor;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.springframework.stereotype.Component;

@Component("startRouteProcessor")
public class StartRouteProcessor implements Processor{

    public void process(Exchange exchange) throws Exception {
        String message = exchange.getIn().getBody(String.class);
        System.out.println(message);
    }

}

Я не получаю управление StartRouteProcessor, когда делаю почтовый запрос ниже в почтальоне

http://localhost:8080/batchFile/routeStart/

Я использовал ниже тестовую полезную нагрузку, чтобы проверить, работает ли она.

{
 "title" : "test title",
 "singer" : "some singer"
}

Когда я отправляю вышеуказанный запрос, я получаю ошибку 404. Пожалуйста, помогите с этим, пожалуйста


person rocky    schedule 29.10.2018    source источник


Ответы (1)


Я пробовал ваш пример, и вам нужно добавить два изменения.

В вашем «основном» классе аннотация «сканирование компонентов» правильная, но вы должны добавить «ServletRegistrationBean» с именем «CamelServlet»:

package org.funcode.app.main;

import org.apache.camel.component.servlet.CamelHttpTransportServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication(scanBasePackages = {"org.funcode.app"})
public class BatchFileApplication {

    private static final String CAMEL_URL_MAPPING = "/api/*";
    private static final String CAMEL_SERVLET_NAME = "CamelServlet";

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

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean registration =
                new ServletRegistrationBean(new CamelHttpTransportServlet(), CAMEL_URL_MAPPING);
        registration.setName(CAMEL_SERVLET_NAME);
        return registration;
    }
}

И если вы хотите просмотреть в журнале контент, который вы разместили в запросе, вам нужно изменить метод запроса на «публикацию»:

package org.funcode.app.main;

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

@Component
public class BatchFileService extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        restConfiguration().component("servlet").bindingMode(RestBindingMode.json);

        rest("/batchFile")
            .consumes("application/json")
            .produces("application/json")
            .post("/routeStart")
            .to("direct:startRoute");
    }
}

Я надеюсь, что это помогает.

person CookieSoup    schedule 02.11.2018