Проблемы с чтением файла интеграции Spring - PullRequest
1 голос
/ 18 июля 2011

Похоже, весеннее слияние удивительно, я новичок в Spring Integeration. У меня есть одно требование Использование весеннего слияния

  1. чтение текстового файла (из папки Source)
  2. сделать несколькоvalidation
  3. если проверка прошла успешно - записать в файл с успехом (в папке sucess)
  4. Если проверка прошла неудачно - записать в файл с ошибкой (в папке ошибок)

Мой файл конфигурации выглядит следующим образом

     <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:si="http://www.springframework.org/schema/integration"
        xmlns:file="http://www.springframework.org/schema/integration/file"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/integration
                http://www.springframework.org/schema/integration/spring-integration-1.0.xsd
                http://www.springframework.org/schema/integration/file
                http://www.springframework.org/schema/integration/file/spring-integration-file-1.0.xsd">

        <bean id="checkCSVReader"
            class="com.check.wrapper">
            <property name="pzMapXML" value="classpath:sampleFileFormat.xml" />
        </bean>

        <bean id="checkTrasnFomer"
            class="com.check.checkTransfomer">
            <property name="wrapper" ref="checkCSVReader" />
        </bean>

        <bean id="fileErrorProcessor"
            class="com.check.ErrorChannelWriter">
        </bean>
        <bean id="listToStringTrans"
            class="com.check.ListToStringTransfomer"></bean>


    <bean id="validation"
            class="com.check.Validation"/>

        <file:inbound-channel-adapter directory="file://D:\check\soruce"   prevent-duplicates="false" 
            auto-create-directory="true" channel="readChannel" >
            <si:poller id="Poller">
                <si:interval-trigger interval="10000" />
            </si:poller>
        </file:inbound-channel-adapter>

        <si:channel id="readChannel" />

        <si:chain input-channel="readChannel" output-channel="processChannel">
            <si:header-enricher error-channel="errorFile" />
            <file:file-to-string-transformer />
            <si:transformer ref="checkTrasnFomer" method="transform" />
            <si:service-activator ref="validation"
                method="validate" />
        </si:chain>

        <si:channel id="processChannel" />

        <si:transformer ref="listToStringTrans" method="transformList"
            input-channel="processChannel" output-channel="finalOut" />

        <si:channel id="finalOut" />

        <file:outbound-channel-adapter id="checkSuccFileOutBound"
            auto-create-directory="true" delete-source-files="true"
            directory="file://D:\check\success" channel="finalOut">
        </file:outbound-channel-adapter>

        <si:channel id="errorFile" />

        <si:transformer ref="fileErrorProcessor"
            input-channel="errorFile" output-channel="errorChannel" method="transformError" />

        <file:outbound-channel-adapter id="errorChannel"
            directory="file://D:\check\error" delete-source-files="true"
             />

        <si:channel id="checkFileErr" />
    </beans>

Мой класс checkFlatPackCVSParserWrapper равен

    public class checkFlatPackCVSParserWrapper {
        private static final Log LOG = LogFactory.getLog("checkFlatPackCVSParserWrapper");
        private Resource pzMapXML;
        private char delimiter = ',';
        private char qualifier = '"';
        private boolean ignoreFirstRecord = false;

        public Resource getPzMapXML() {
            return pzMapXML;
        }
        public void setPzMapXML(Resource pzMapXML) {
            this.pzMapXML = pzMapXML;
        }
        public char getDelimiter() {
            return delimiter;
        }
        public void setDelimiter(char delimiter) {
            this.delimiter = delimiter;
        }
        public char getQualifier() {
            return qualifier;
        }
        public void setQualifier(char qualifier) {
            this.qualifier = qualifier;
        }
        public boolean isIgnoreFirstRecord() {
            return ignoreFirstRecord;
        }
        public void setIgnoreFirstRecord(boolean ignoreFirstRecord) {
            this.ignoreFirstRecord = ignoreFirstRecord;
        }

        public Parser getParser(String csv) {
            if(LOG.isDebugEnabled())
                LOG.debug("getParser: " + csv);

            Parser result = null;
            try {
                result = DefaultParserFactory.getInstance().newDelimitedParser(
                        pzMapXML.getInputStream(), //xml column mapping
                        new ByteArrayInputStream(csv.getBytes()),  //txt file to parse
                        delimiter, //delimiter
                        qualifier, //text qualfier
                        ignoreFirstRecord);

            }catch (Exception e) {
                if(LOG.isDebugEnabled())
                   LOG.debug("Unable to read file:  " + e );
                throw new RuntimeException("File Parse exception");
            }   
            return result;
        }
    }

sampleFileFormat.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE PZMAP SYSTEM  "flatpack.dtd" >
    <PZMAP>
        <COLUMN name="FIRSTNAME" />
        <COLUMN name="LASTNAME" />
    </PZMAP> 


 and checkTransfomer is 


    public class checkTransfomer {
        private static final Log LOG = LogFactory.getLog(checkTransfomer.class);
        private CheckFlatPackCVSParserWrapper wrapper;

        public String transform(String csv) {
            Parser parser = wrapper.getParser(csv);
            if(LOG.isDebugEnabled()) {
                LOG.debug("Parser is: " + parser);
            }        
            DataSet ds = parser.parse();
            ArrayList<Check> list = new ArrayList<Check>();
            while(ds.next()) {
                Check check= new Check();
                check.setFirstName(ds.getString("FIRSTNAME"));
                check.setLastName(ds.getString("LASTNAME"));
                if(LOG.isDebugEnabled()) {
                    LOG.debug("Bean value is: " + bean);
                }        
                list.add(bean);            
            }
            if(LOG.isDebugEnabled()) {
                LOG.debug("Records fetched is: " + list.size());
            }        
            return list.toString();
        }

        public CheckFlatPackCVSParserWrapper getWrapper() {
            return wrapper;
        }

        public void setWrapper(CheckFlatPackCVSParserWrapper wrapper) {
            this.wrapper = wrapper;
        }

И мой ErrorChannelWriter равен

    public class ErrorChannelWriter {

        public static final Log LOG = LogFactory.getLog(ErrorChannelWriter.class);

        public Message<?> transformError(ErrorMessage errorMessage) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("Transforming errorMessage is: " + errorMessage);
            }
            return ((MessagingException) errorMessage.getPayload())
                    .getFailedMessage();
        }
        }

и мой класс validagtion равен

  com.check.Validation

  public class Validation 
  {

   void validation(CheckCheck)
   {
  if(Check.getFirstName().equals("maya"))
  {
  throw new RuntimeException("Name Already exist");
  }



  }

  }

, а мой ListToStringTransfomer равен

      public class ListToStringTransfomer {
        private static final Log LOG=LogFactory.getLog(ListToStringTransfomer.class);


        public String transformList(List<IssueAppBean> list) {
            return list.toString();
        }

    }

, а мой файл содержит два поля

> maya,kanana 

здесь, если мойневерный формат файла, тогда записи перемещаются в файл ошибок, но если мой класс проверки потерпит неудачу (здесь, например: я проверяю, что мое имя совпадает с maya, тогда я выбрасываю исключение во время выполнения), эта запись не переходит в ошибку файл.как я могу добиться, чтобы мои предложения по задачам были оценены

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...