https://docs.spring.io/spring-integration/docs/5.3.1.RELEASE/reference/html/index-single.html#configuring -with- java -configuration-8
По приведенной выше ссылке показан официальный пример кода. Когда я тестирую этот код, возникает исключение.
"Exception in thread "main" org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'directory' cannot be found on object of type 'org.springframework.messaging.MessageHeaders' - maybe not public or not valid?"
Но дело не в этом, поэтому я изменил программу и продолжил тестирование.
@SpringBootApplication
@IntegrationComponentScan
public class SimpleFileApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context =
new SpringApplicationBuilder(SimpleFileApplication.class)
.web(WebApplicationType.NONE)
.run(args);
MyGateway gateway = context.getBean(MyGateway.class);
// gateway.writeToFile("foo.txt", new File("/Users/duandarui/temp/", "fileWritingFlow"), "foo");
gateway.writeToFile("foo");
}
@Bean
@ServiceActivator(inputChannel = "writeToFileChannel")
public MessageHandler fileWritingMessageHandler() {
// Expression directoryExpression = new SpelExpressionParser().parseExpression("headers.directory");
// FileWritingMessageHandler handler = new FileWritingMessageHandler(directoryExpression);
FileWritingMessageHandler handler = new FileWritingMessageHandler(new File("/Users/duandarui/temp/log.txt"));
handler.setFileExistsMode(FileExistsMode.APPEND);
return handler;
}
@MessagingGateway(defaultRequestChannel = "writeToFileChannel")
public interface MyGateway {
void writeToFile(String data);
void writeToFile(@Header(FileHeaders.FILENAME) String fileName,
@Header(FileHeaders.FILENAME) File directory, String data);
}
}
Затем я получил другое исключение.
Exception in thread "main" org.springframework.messaging.MessageHandlingException: error occurred in message handler [bean 'fileWritingMessageHandler'; defined in: 'com.example.integration.simplefile.SimpleFileApplication'; from source: 'org.springframework.core.type.StandardMethodMetadata@18920cc']; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available, failedMessage=GenericMessage [payload=foo, headers={id=d122a505-1066-8904-041e-372ef36d3385, timestamp=1594630697745}]
... ...
Caused by: org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
Итак, я хочу знать причину исключения «нет выходного канала или заголовка replyChannel».