Как преобразовать файл в строку с помощью SpringIntegration

#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;
    }

}