2016-07-14 5 views
0

수집 수집기를 사용하여 하나의 플로우에서 여러 파일을 읽는 경우가 있습니다. 그런 다음 분할자를 사용하여 파일을 분할하여 하나씩 처리합니다. 이제 파일의 일부 요소를지도에 넣고이지도를 모든 분할기 세션에서 사용할 수 있도록 모든 파일에 채울 수 있도록합니다.세션 변수를 스플리터의 모든 세션에서 사용할 수 있습니다.

은 파일 처리의 범위, 즉 스플리터가 설정된 후에 파일 처리의 현재 세션에서 사용할 수 있도록 설정합니다. 그러나, 나는 스플리터 전에 세션 변수를 null로 선언 할 생각을하고있었습니다. 분할 후 모든 세션에서 사용할 수 있습니까?

첫 번째 파일 프로세스에서 본 것처럼 생각합니다. 세션 변수를 null로 설정하는 방법도 알고 싶습니다. 나는 그것을 찾지 못했어요. 또한 상황에 대한 다른 해결책도 인정 될 것입니다. 여기

내 흐름이다 :

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:json="http://www.mulesoft.org/schema/mule/json" 
    xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" 
    xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd 
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd"> 
    <flow name="dictionary_keywordsFlow"> 
     <file:inbound-endpoint path="D:\mJunction\CATALOG INTEGRATION TO BE MODIFIED\sOURCE FILES\Read_dir" connector-ref="Filefinal" pollingFrequency="10000" responseTimeout="10000" doc:name="File" moveToDirectory="D:\mJunction\CATALOG INTEGRATION TO BE MODIFIED\sOURCE FILES\Read_dir\backup"> 
      <file:filename-regex-filter pattern="BSL.*" caseSensitive="true"/> 
     </file:inbound-endpoint> 
     <!-- <set-session-variable value="#[message.inboundProperties['originalFilename']]" variableName="filename" doc:name="Session Variable" /> --> 
     <set-property propertyName="MULE_CORRELATION_ID" value="#[message.inboundProperties['originalFilename']]" doc:name="Property"/> 
     <collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/> 
     <!-- <custom-transformer class="AddContainerMapSessionvalue" doc:name="Java"/> --> 
     <splitter expression="#[payload]" doc:name="Splitter"/> 
      <logger message="&gt;&gt;&gt; flow to extract keywords and create dictionary" level="INFO" doc:name="Logger"/> 
      <logger message="Payload received for maeterial list is #[payload]" level="INFO" doc:name="Original Payload"/> 
      <splitter expression="#[xpath3('//CATALOGUE',payload,'NODESET')]" doc:name="Splitter"/> 
      <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/> 
      <json:xml-to-json-transformer doc:name="XML to JSON"/> 
      <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/> 
      <logger message="payload is #[payload]" level="INFO" doc:name="Logger"/> 
      <custom-transformer class="com.mjunction.transformers.DictionarykeywordsGenerator" doc:name="Java"/> 
      <logger message="payload is #[payload]" level="INFO" doc:name="Logger"/> 
      <logger message="session variable is #[sessionVars.container_map]" level="INFO" doc:name="Logger"/> 
      <json:object-to-json-transformer doc:name="Object to JSON"/> 
      <file:outbound-endpoint path="src/main/resources/dictionaryfiles/output" outputPattern="output.txt" connector-ref="Filefinal" responseTimeout="10000" doc:name="File"/> 




    </flow> 
</mule> 

감사합니다, 아룬

답변

0

당신은

<set-session-variable variableName="fileName" value="#['']" doc:name="Session Variable"/>. 

다음과 같이 널 세션 변수를 정의 할 수 있습니다 예, 스플리터 및 저장지도하기 전에 세션 변수를 정의하는 경우 (초기 페이로드에서이 맵을 얻으 려한다면) 세션을 통해 사용할 수 있습니다.

세션을 사용하는 경우 분할기를 사용하면 세션에서 추출하고 저장하는 페이로드 구조가 동일 할 때마다 물론 오히려 재정의가 수행되므로 캐시 종류의 개념을 사용할 수 있습니다. 참조 : https://docs.mulesoft.com/mule-user-guide/v/3.7/cache-scope, or firstTime 분할에 저장하고 다음 세션에 대문자로 사용할 경우 작은 조건 확인 #[sessionVars['fileName'] != null? 'true':'']을 수행하십시오. 이를 바탕으로 보류중인 로직을 생성 할 수 있습니다.