я сейчас получаю эту ошибку:
DestinationResolutionException:
no output-channel or replyChannel header available .
У меня есть файловый шлюз, который внедряется в контроллер
@MessagingGateway
public interface FileGateway {
@Gateway(requestChannel = "router.input", replyChannel = "output")
FileRequestResponse requestFile(FileRequestRequest fileFetchRequest);
}
и маршрутизатор, который отправляет сообщения на соответствующие каналы
@Bean
IntegrationFlow routeFileRequest() {
return IntegrationFlows.from("router.input")
.<FileRequestRequest, FileType>route(m -> m.getParameters().getFileType(), m -> m
.channelMapping(FileType.CONTRACT, "contract.transform")
.channelMapping(FileType.INVOICE, "invoice.tranform"))
// .channelMapping(FileType.USAGE, "usageChannel"))
.get();
}
Здесь мой компонент-преобразователь преобразует сообщение в строку и отправляет в канал contract.input, в своих журналах я вижу, что приходит сообщение, контракт, входной канал, однако после ответа в методе обработчика я получаю:
org.springframework.messaging.core.DestinationResolutionException:
no output-channel or replyChannel header available.
Transformer:
@Transformer(inputChannel = "contract.transform", outputChannel = "contract.input")
public Message<String> transformContractMessage(Message<FileRequestRequest> request) {
/**
*
* @param request
* @return contractId
*/
FileRequestRequest frr = request.getPayload();
return MessageBuilder.
withPayload(request.
getPayload().getContractId()).
setHeader("fileType", "CONTRACT").build();
}
Ниже приведен активатор службы для отправки сообщения обратно на router.output, однако я сталкиваюсь с этим исключением выше.
@ServiceActivator(inputChannel = "contract.input" ,outputChannel = "output")
public FileRequestResponse res(Message<String> message){
log.info(" Retrieving File With Contract ID {} ",message.getPayload());
ContractRsp contractResponse = contractFetchService.retrieveContract(message.getPayload());
log.info(" Contract File Received {} ",contractResponse);
return FileRequestResponse.builder().build();
}
@Bean
public DirectChannel output(){
DirectChannel channel = new DirectChannel();
return channel;
}
Моя цель здесьвернуть сообщение обратно в интерфейс FileGateway после ответа.