2014-07-13 2 views
2

에 JSON은 2 개 흐름이있다 : - 하나의 흐름은 REST 서비스를 노출 -방법 콘텐츠 형식의 유효성을 검사 = 나는 뮬 설정이 뮬

<flow name="restServiceFlow1" doc:name="restFlow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP"/> 
     <jersey:resources doc:name="REST"> 
      <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/> 
     </jersey:resources> 
</flow> 

및 배치하여 서비스를 소비하는 또 다른 흐름 파일 인바운드를 통해 JSON 요청 : - 컨텐츠 유형은 다음하지 표시됩니다 JSON과 동일하지 않은 경우

<flow name="restFlow2"> 
    <file:inbound-endpoint path="E:\backup\test" responseTimeout="10000" connector-ref="File_Global"> 
    <file:filename-regex-filter pattern="aa.txt" caseSensitive="false"/> 
    </file:inbound-endpoint> 

    <json:json-to-object-transformer returnClass="java.util.HashMap"/> 

    <foreach collection="#[payload.insertDataRequest]"> 
    <http:outbound-endpoint exchange-pattern="request-response" 
      contentType="application/json" method="GET" 
      address="http://localhost:8082/getData/insert/?id=#[payload.id]&amp;name=#[payload.name]&amp;age=#[payload.age]&amp;designation=#[payload.designation]"/> 
    </foreach> 
</flow> 

이제 요구 사항 ... 콘텐츠 유형이 JSON인지 여부를 파일 인바운드 엔드 포인트 이후에 콘텐츠 형식을 확인하기 로그의 JSON 메시지 ..

내가 시도 다음 - 나는 파일 인바운드 엔드 포인트 후 선택 라우터를 배치 : - 콘텐츠 형식이있는 JSON하지 표시됩니다 JSON되지 않은 경우

<when evaluator="groovy" expression="payload.ContentType=='JSON'"> 

는 내용이 페이로드를 입력 확인하고 로그인 그래서 나는 선택의 여지가 라우터의 기본에 로그를 배치 ... 그러나 나는 다음과 같은 예외를 얻고있다 : -

Exception stack is: 
1. No such property: ContentType for class: org.mule.transport.file.ReceiverFileInputStream (groovy.lang.MissingPropertyException) 
    org.codehaus.groovy.runtime.ScriptBytecodeAdapter:50 (null) 
2. groovy.lang.MissingPropertyException: No such property: ContentType for class: org.mule.transport.file.ReceiverFileInputStream (javax.script.ScriptException) 
    org.codehaus.groovy.jsr223.GroovyScriptEngineImpl:323 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/script/ScriptException.html) 

이제 파일 인바운드 엔드 포인트 이후에 콘텐츠 형식을 확인하는 더 좋은 방법이 ??? 제발 좀 더 나은 방법을 제안하십시오 ... 내가 다른 조건을 제어하고 로그에 메시지를 표시하고 싶기 때문에 is-json-filter을 사용하고 싶지 않음에 유의하십시오 ...

답변

5

여전히를 사용할 수는 있지만 포장해야합니다. 메시지 필터에서 "else"경로를 제어 할 수 있습니다.

<message-filter onUnaccepted="noJsonFlow" throwOnUnaccepted="false"> 
    <json:is-json-filter /> 
</message-filter> 
+0

로거 메시지를 어디에 넣어야합니까? –

+0

및 onUnaccepted = "noJsonFlow"란 무엇입니까? –

+2

좋아요 ... 알아 들었어 .JJFlow는 로거를 정의한 또 다른 흐름이다. –