как разбить записи на несколько строк в пакете - PullRequest
0 голосов
/ 24 октября 2019

У меня есть список из нескольких записей, поступающих из for-каждой в формате строки. Я передаю их в Batch для разделения и обработки, но они все еще записываются в мой компонент File в виде одной строки. Я использовал выражение # [payload.split ('\ n')], чтобы разбить список строк на несколько строк. Пожалуйста помоги. ниже мой код пока.

   <mulerequester:config name="Mule_Requester" doc:name="Mule Requester"/>
   <file:connector name="File" autoDelete="false" streaming="true" validateConnections="true" doc:name="File" outputAppend="true"/>
   <flow name="inbound_Flow">
       <http:listener config-ref="HTTP_Listener_Configuration" path="/001" allowedMethods="GET" doc:name="HTTP"/>
       <scripting:component doc:name="Groovy">
           <scripting:script engine="Groovy"><![CDATA[ def folder = "${file.interfaceInbound.path}";   
       def baseDir = new File(folder); //new folder

      def  fileList = baseDir.listFiles(); //list of file names

      ArrayList<String> InboundFileList = new ArrayList<String>();

      for(File file : fileList) {

               if( file.isDirectory() == false && file.getName().startsWith("${file.pattern}")){
               InboundFileList.add(file.getName());
           }                     
      }

message.setProperty('InboundFileList',InboundFileList,org.mule.api.transport.PropertyScope.INVOCATION); 

if(InboundFileList.size() == 0){
message.setProperty('ZeroFiles',"No files available for processing",org.mule.api.transport.PropertyScope.INVOCATION); 
throw new java.lang.Exception("No files available for processing");
}
]]></scripting:script>
       </scripting:component>
       <logger message="get valid file names from database" level="INFO" doc:name="Logger"/>
       <db:select config-ref="Oracle_Configuration" doc:name="get file names">
           <db:dynamic-query><![CDATA[select FILE_NAME from vdis_fin.PY_GL_FILES_TO_PROCESS]]></db:dynamic-query>
       </db:select>
       <foreach doc:name="For Each" collection="#[payload]">
           <logger message="file payload #[payload]" level="INFO" doc:name="Logger"/>
           <set-variable variableName="fileName" value="#[payload.FILE_NAME]" doc:name="fileName"/>
           <scripting:component doc:name="Groovy">
               <scripting:script engine="Groovy"><![CDATA[def matchFound =false;

for(i in flowVars['InboundFileList']){
log.info("file name from DB:" +flowVars.fileName);
log.info("Files in folder:"+i);
if((flowVars['fileName'])== i)
{
   matchFound=true;
   break;

}
}
message.setProperty('matchFound',matchFound,org.mule.api.transport.PropertyScope.INVOCATION); 
       ]]></scripting:script>
           </scripting:component>
           <logger message="#[flowVars.matchFound]" level="INFO" doc:name="Logger"/>
           <choice doc:name="Choice">
               <when expression="#[flowVars['matchFound']=='true']">
                   <logger message="file name #[flowVars.fileName]  is valid" level="INFO" doc:name="Logger for valid"/>
                   <logger message="file path : ${file.interfaceInbound.path}${ils.filename}${ils.sourceExtension}" level="INFO" doc:name="Logger"/>
                   <mulerequester:request config-ref="Mule_Requester" resource="file:///${file.interfaceInbound.path}${ils.filename}${ils.sourceExtension}" doc:name="Mule Requester"/>
                   <object-to-string-transformer doc:name="Object to String"/>

                   <batch:execute name="inbound_flowBatch" doc:name="inbound_flowBatch"/>
               </when>
               <otherwise>
                   <logger message="file name #[flowVars.fileName]  is not valid" level="INFO" doc:name="Logger"/>
               </otherwise>
           </choice>
       </foreach>
   </flow>
   <batch:job name="inbound_flowBatch">
       <batch:input>
           <set-payload value="#[payload.split('\n').]" doc:name="Set Payload"/>
       </batch:input>
       <batch:process-records>
           <batch:step name="Batch_Step1" >
               <logger message="#[payload]" level="INFO" doc:name="Logger"/>
               <file:outbound-endpoint path="${file.interfaceOutbound.path}" outputPattern="${file.Outbound.name}" responseTimeout="10000" doc:name="File" connector-ref="File"/>
           </batch:step>

       </batch:process-records>
       <batch:on-complete>
           <logger message="completed iteration" level="INFO" doc:name="Logger"/>
       </batch:on-complete>
   </batch:job>
</mule> 



...