2013-10-28 27 views
0

我很努力地滿足我對Mule REST模塊的使用案例。我想根據templateUri和HTTP方法進行不同的轉換。Mule:根據HTTP方法和REST路由器應用過濾器和變換器(和錯誤處理)

這裏是我的配置:

<flow name="http-interface"> 
     <http:inbound-endpoint address="http://localhost:8555" exchange-pattern="request-response"/> 

     <rest:router templateUri="/schedule"> 
      <rest:post> 
       <mxml:schema-validation-filter schemaLocations="xsd/scheduler.xsd" returnResult="true"/> 
       <mxml:jaxb-xml-to-object-transformer jaxbContext-ref="jaxb-context"/> 
       <vm:outbound-endpoint path="addjob"/> 
      </rest:post> 
     </rest:router> 

     <choice-exception-strategy> 
      <catch-exception-strategy when="exception.causedBy(org.mule.api.routing.filter.FilterUnacceptedException)"> 
       <logger level="ERROR" message="FilterUnacceptedException #[message]"/> 
       <set-payload value="An error occurred while validating request. Please check the XML payload"/> 
       <set-property propertyName="http.status" value="400"/> 
      </catch-exception-strategy> 
      <catch-exception-strategy when="exception.causedBy(java.lang.NullPointerException)"> 
       <logger level="ERROR" message="NullPointerException #[message]"/> 
       <set-payload value="An error occurred while validating request. Please check the XML payload"/> 
       <set-property propertyName="http.status" value="400"/> 
      </catch-exception-strategy> 
     </choice-exception-strategy> 
    </flow> 

當無效XML被張貼到終點,我得到的NestedProcessorChain.processWithExtraProperties一個NullPointerException。因此,這個例外(不理想)的討厭趕上。

我的IDE爲靜態提供了模式驗證錯誤:流程中的路由器和其餘部分中的mxml過濾器/變換器:post元素。我可以通過將rest:路由器放入入站端點來刪除第一個路由器。結果是一樣的,大多數例子沒有這個

我試着將過濾器/轉換移動到VM端點上的一個單獨的流。驗證是乾淨的,但是我不知道如何獲取HTTP錯誤代碼和響應回到客戶端。

任何幫助非常感謝, 阿爾菲。

回答

1

的NPE是NestedProcessorChain.processWithExtraProperties是騾子REST路由器的錯誤,我提出的問題here,但似乎REST路由器不支持了。
一般而言,當您使用未在您的<其餘部分描述的HTTP方法調用您的URI時,會引發NPE:路由器>元素。預計的例外是UnsupportedHttpVerbException

詳細我已經在我的一個blog posts中描述了這個問題,並提供了Mule REST路由器的固定版本。

代替使用VM端點的,呼叫使用<流REF />部件的單獨的流動或與<processor-chain />包裹。