2015-08-05 1 views
4

У меня есть кусок в потоке, где сделал API вызова ReST:Spring Integration Java DSL - Как вызвать int-http: исходящий-шлюз?

<int:channel id="requestChannel"/> 

<int-http:outbound-gateway request-channel="requestChannel" 
          reply-channel="logger" 
          url="${api.base.uri}/data" 
          http-method="PUT" 
          expected-response-type="java.lang.String"/> 

<int:logging-channel-adapter id="logger" 
          logger-name="logger" 
          expression="payload" 
          level="INFO"/> 

Я пытаюсь повторить это с помощью Java DSL, но не может найти соответствующую документацию. Любая помощь приветствуется.

+0

Я не понял ваши сомнения, конвертировал в Java DSL? вы имеете в виду доменные языки? –

+0

@RafaelZeffa - да, обратитесь к этому: https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference – Ocelot

+0

спасибо .. я не знал этот проект! –

ответ

3

Право, интеграция с весной Java DSL не предоставляет фабрику имен для HTTP.

Во всяком случае, мы можем идти вперед и сделать это с помощью своих родовых компонентов:

@Bean 
    public MessageHandler logger() { 
     LoggingHandler loggingHandler = new LoggingHandler("INFO"); 
     loggingHandler.setLoggerName("logger"); 
     // This is redundant because the default expression is exactly "payload" 
     // loggingHandler.setExpression("payload"); 
     return loggingHandler; 
    } 

    @Bean 
    public MessageHandler httpGateway(@Value("${api.base.uri}/data") URI uri) { 
     HttpRequestExecutingMessageHandler httpHandler = new HttpRequestExecutingMessageHandler(uri); 
     httpHandler.setExpectedResponseType(String.class); 
     httpHandler.setHttpMethod(HttpMethod.PUT); 
     return httpHandler; 
    } 

    @Bean 
    public IntegrationFlow httpFlow(MessageHandler httpGateway) { 
     return IntegrationFlows.from("requestChannel") 
       .handle(httpGateway) 
       .handle(logger()) 
       .get(); 
    } 

С другой стороны указанную документацию демонстрируют образец именно для HttpRequestHandlingMessagingGateway ...

UPDATE

Кстати: не стесняйтесь поднять билет JIRA для добавления поддержки HTTP в DSL Java.

+1

Спасибо за это, отлично работает. Я подниму билет JIRA :) Прежде чем отправить вопрос, я попытался использовать HttpRequestExecutingMessageHandler (со ссылкой на документированное использование HttpRequestHandlingMessagingGateway). Однако я не мог получить четкое представление о том, как его использовать. Есть ли хорошая документация по разным разрешениям на основе пространства имен/на основе Java интеграции компонентов/каналов интеграции? Чтобы я мог использовать их вместе с DSL (в случае, если DSL не поддерживает их). – Ocelot

+0

Да ... Это немного сложно: 1) каждый модуль имеет свой собственный 'AbstractIntegrationNamespaceHandler', например. 'HttpNamespaceHandler'. 2) каждый компонент пространства имен (тег xml) имеет свой собственный парсер, например. 'HttpOutboundGatewayParser'. 3) каждый анализатор создает один или несколько компонентов для контекста приложения, например. 'HttpRequestExecutingMessageHandler'. Я думаю, что в следующем выпуске мы сделаем несколько «трудных» работ, которые следует упомянуть в XSD, для которых целевой класс является перкулярным XML-тегом. –

+0

Еще раз спасибо, это действительно полезная информация. Да, было бы здорово, если бы эта информация могла быть включена в XSD. – Ocelot