#spring #spring-boot #spring-integration
#spring #spring-загрузка #spring-интеграция
Вопрос:
Я пытаюсь прочитать текстовый файл и преобразовать его в строку с помощью SpringIntegration.
Нужна помощь в преобразовании файла в строку.
Ссылка на Git: https://github.com/ravikalla/spring-integration
Исходный код —
@Bean
@InboundChannelAdapter(value = "payorFileSource", poller = @Poller(fixedDelay = "10000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource sourceReader = new FileReadingMessageSource();
sourceReader.setDirectory(new File(INPUT_DIR));
sourceReader.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
return sourceReader;
}
@Bean
@Transformer(inputChannel="payorFileSource", outputChannel="payorFileContent")
public FileToStringTransformer transformFileToString() {
FileToStringTransformer objFileToStringTransformer = new FileToStringTransformer();
return objFileToStringTransformer;
}
Ошибка —
SEVERE: org.springframework.integration.handler.ReplyRequiredException: No reply produced by handler 'fileCopyConfig.transformPayorStringToObject.transformer.handler', and its 'requiresReply' property is set to true., failedMessage=GenericMessage [payload=1|test1, headers={sequenceNumber=1, file_name=payor.txt, sequenceSize=4, correlationId=ff1fef7d-7011-ee99-8d71-96146ac9ea07, file_originalFile=source/payor.txt, id=fd4f950b-afcf-70e6-a053-7d59ff593add, file_relativePath=payor.txt, timestamp=1554875904858}]
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:119)
Ответ №1:
Вы можете преобразовать файл в InputStream
и использовать IOUtils.toString(inputStream)
для преобразования его в строку.
Ответ №2:
Эта ошибка поступает откуда-то еще; FTST не может вернуться null
.
Я не просматривал весь ваш код, но это выглядит подозрительно:
@Bean
@Transformer(inputChannel="payorRawStringChannel", outputChannel="payorRawObjectChannel")
public GenericTransformer<String, Payor> transformPayorStringToObject() {
return new GenericTransformer<String, Payor>() {
@Override
public Payor transform(String strPayor) {
String[] arrPayorData = strPayor.split(",");
Payor objPayor = null;
if (null != arrPayorData amp;amp; arrPayorData.length > 1)
objPayor = new Payor(Integer.parseInt(arrPayorData[0]), arrPayorData[1]);
return objPayor;
}
};
}
Он может возвращать значение null; преобразователям не разрешено это делать.
Включите ведение журнала ОТЛАДКИ и следуйте потоку сообщений, чтобы увидеть, какой компонент неисправен.
Комментарии:
1. Ваша проблема на самом деле не в том, что упоминается в вопросе
FileToStringTransformer
, а именно в том коде, который Гэри показывает здесь. Вы не можете вернутьсяnull
из функции transformer.2. ОК… Я внес изменения, чтобы избежать возврата нулевого значения, и он работает нормально.
Ответ №3:
package org.springframework.integration.samples.tcpclientserver;
import java.io.UnsupportedEncodingException;
import org.springframework.core.convert.converter.Converter;
/**
* Simple byte array to String converter; allowing the character set
* to be specified.
*
* @author Gary Russell
* @since 2.1
*
*/
public class ByteArrayToStringConverter implements Converter<byte[], String> {
private String charSet = "UTF-8";
public String convert(byte[] bytes) {
try {
return new String(bytes, this.charSet);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return new String(bytes);
}
}
/**
* @return the charSet
*/
public String getCharSet() {
return charSet;
}
/**
* @param charSet the charSet to set
*/
public void setCharSet(String charSet) {
this.charSet = charSet;
}
}