Я использую Spring Integration 4. Я надеялся определить контракт на различные интеграции, посредством которого интеграции необходимо реализовать общий интерфейс, как:Spring Integration: Работа с обработчиками без MessageProducer
public interface Integration {
Object execute(Map<String, Object> inputs);
}
Тогда определяет интеграцию вы определяете шлюз:
<int:gateway service-interface="com.whatever.Integration" ... >
Я получил эту работу, но я застрял, пытаясь понять, как обрабатывать возвращаемое значение execute
метода. Первая интеграция, которую я построил, отправляет электронное письмо и поэтому на самом деле не имеет возвращаемого значения, т. Е. Последний элемент рабочего процесса является отправителем почты не MessageProducer
: <int-mail:outbound-channel-adapter ... >
.
Если я изменяю тип возвращаемого метода execute
на void
, то интеграция выполняется нормально, но как только я изменю его на Object
, интеграция запускается, но никогда не возвращается. Я предполагаю, что это потому, что он ждет что-то на канале ответа.
Для такого типа интеграционных процессов, не являющихся результатом, существует ли способ принудительно вернуть значение true
или что-то еще? Я думал о попытке чего-то вроде <int:transformer expression="true">
, но я не могу поместить это в свою цепочку после <int-mail:outbound-channel-adapter>
, потому что позже не дает значения и поэтому не может предшествовать чему-либо в цепочке.
Таким образом, я немного смущен тем, как обрабатывать не MessageProducer
элементов в целом. Буду признателен за любую оказанную помощь.
p.s. Если у кого-нибудь есть отзывы об архитектуре интеграции, предложенной выше, не стесняйтесь отвечать на это и в комментариях.
Почему вы изобретаете отражение? Одним из важных аспектов интеграции Spring является то, что вы можете объявлять строго типизированные методы обслуживания и позволить Spring адаптировать ваше сообщение к ним. – chrylis
@chrylis Не пытайтесь изобретать отражение, просто пытаясь создать единый интерфейс, из которого может быть выполнено множество интеграций (построенных и динамически загруженных после развертывания базового приложения). Я открыт для предложений по лучшему пути. – Marplesoft
Просто используйте сильную печать. Spring Integration адаптирует сигнатуры метода. – chrylis