Mule:根据带有REST路由器的HTTP方法应用过滤器和变换器(以及错误处理)

时间:2013-10-28 21:13:37

标签: rest mule

我正在努力通过Mule REST模块来满足我的用例。我想根据templateUri和HTTP方法进行不同的转换。

这是我的配置:

    <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为休息提供了模式验证错误:流中的路由器和其余的:post元素中的mxml过滤器/变换器。我可以通过将rest:router放在inbound-endpoint中来删除第一个。结果是一样的,大多数例子没有这个

我尝试将过滤器/转换移动到VM端点上的单独流。验证是干净的,但后来我无法弄清楚如何将HTTP错误代码和响应发送回客户端。

任何帮助非常感谢, 阿尔菲。

1 个答案:

答案 0 :(得分:1)

NPE是NestedProcessorChain.processWithExtraProperties是Mule REST路由器中的一个错误,我提出了一个问题here,但似乎不再支持REST路由器了。
通常,当您使用&lt; rest:router&gt; 元素中未描述的HTTP方法调用URI时,会抛出NPE。预期的异常是 UnsupportedHttpVerbException

详细内容我在我的一个blog posts中描述了这个问题,并提供了Mule REST路由器的固定版本。

不使用VM端点,而是使用&lt; flow-ref /&gt; 组件调用单独的流,或者使用<processor-chain />包装它。