Spring Integration Java DSL - @ServiceActivator метод с аннотациями параметров @ Header



У меня есть метод Spring Integration 4 bean со следующей сигнатурой:



@Component
public class AService {

@ServiceActivator
public Message<?> serviceMethod(
Message<?> message,
@Header(ServiceHeader.A_STATE) AState state,
@Header(ServiceHeader.A_ID) String id) {

...
}

...
}


На данный момент я вызываю этот метод службы из Spring Integration Java DSL (spring-integration-java-dsl:1.0.1.RELEASE) поток такой:



.handle("aService", "serviceMethod")


Это работает абсолютно нормально, но мне интересно, можно ли вызвать метод service следующим образом:



.handle(Message.class, (m, h) -> aService.serviceMethod(m, h))


Причина, по которой я хотел бы вызвать метод обслуживания таким образом, заключается в том, что, когда кто-то смотрит на код с помощью IDE, такой как Eclipse, они могут детализировать метод этой службы, например, выделив метод и нажав клавишу F3.



Итак, мой вопрос заключается в том, существует ли альтернативный способ вызова метода @ServiceActivator (который включает аннотации @Header) без использования строк для имени службы / метода службы в .handle()?
544   1  

1 ответ:

Не совсем, Вы не можете передать все сообщение и выбранные заголовки, но вы можете передать полезную нагрузку и отдельные заголовки...

.handle(String.class, (p, h) -> aService().serviceMethod(p, 
     (AState) h.get(ServiceHeader.A_STATE),
     (String) h.get(ServiceHeader.A_ID)))

(предполагая, что полезная нагрузка - это String).

Обратите внимание, что аннотации @Header в этом сценарии бессмысленны, поскольку вы непосредственно извлекаете заголовки в лямбда-выражении.

Он также не должен быть аннотирован как @ServiceActivator; Вы можете вызвать любой метод bean таким образом.

public Message<?> serviceMethod(
        String payload, AState state, String id) {

    ...
}

The

.handle("aService", "serviceMethod")

Вариация-это когда все происходит волшебство (соответствие содержимого сообщения параметрам метода). Конечно, мы не можем сделать никакого "волшебства", когда вы хотите вызвать метод непосредственно в Java.

Comments

    Ничего не найдено.