0

为了满足 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 为 rest:router in flow 和 rest:post 元素中的 mxml filter/transformer 提供了架构验证错误。我可以通过将 rest:router 放在入站端点中来删除第一个。结果是一样的,大多数例子都没有这个

我尝试将过滤器/转换移动到 VM 端点上的单独流中。验证是干净的,但是我不知道如何获取 HTTP 错误代码并将响应返回给客户端。

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

4

1 回答 1

1

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

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

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

于 2013-10-30T10:21:59.377 回答