Error handling Mule:未调用异常策略

Error handling Mule:未调用异常策略,error-handling,esb,mule,Error Handling,Esb,Mule,我在Mule 3.2.1中有一个简单的流程,它只应该重新发布一个Web服务。目的是了解Mule中异常处理是如何工作的。为了测试这一点,我使用了一个总是返回异常(即从不正确或错误响应)的web服务,我希望捕获该异常并对其进行处理(先登录到文件中) 问题是,似乎根本没有调用异常策略 我尝试了两个版本——第一个版本使用默认异常策略,第二个版本使用自定义异常策略。流程如下所示: 当我使用上述配置运行Mule服务器时,我没有得到预期的输出。我的期望是默认的异常策略应该在异常目录中生成一个文件,但这不会发

我在Mule 3.2.1中有一个简单的流程,它只应该重新发布一个Web服务。目的是了解Mule中异常处理是如何工作的。为了测试这一点,我使用了一个总是返回异常(即从不正确或错误响应)的web服务,我希望捕获该异常并对其进行处理(先登录到文件中)

问题是,似乎根本没有调用异常策略

我尝试了两个版本——第一个版本使用默认异常策略,第二个版本使用自定义异常策略。流程如下所示:

当我使用上述配置运行Mule服务器时,我没有得到预期的输出。我的期望是默认的异常策略应该在异常目录中生成一个文件,但这不会发生。 Java策略应该将消息记录到控制台中,但我还是看不到任何东西。。。句柄方法中的断点也不会触发


提前感谢您的帮助。

问题出在Mule版本上。流量在3.3.0-R3中正常工作

流程:

<default-exception-strategy>
    <processor-chain>
        <custom-transformer class="exception.StackTraceTransformer"/>
        <file:outbound-endpoint path="data/exception" outputPattern="#[function:datestamp:yyyyMMddHHmmss].txt"/>
    </processor-chain>
</default-exception-strategy>

试图找出问题所在,所以我需要问:远程服务是否会向所有调用返回HTTP 5xx错误?是的,我正在测试的服务返回500。最终问题出在Mule版本上。我能够在3.3.0-R3版本中使用它。最后,我编写了自己的简单转换器,从异常中获取堆栈跟踪,并能够使用默认异常策略和custom-exception-strategy使其工作。在Mule 3.1中,我体验到通过
flow ref
调用流会弄乱被调用流的异常策略(将调用
DefaultServiceExceptionStrategy
)。解决方案(短期):通过
vm
端点调用流,而不是
flow ref
。解决方案2(长期效果更好):不要使用Mule。
public class TestExceptionListener extends DefaultMessagingExceptionStrategy {

    public TestExceptionListener(MuleContext muleContext) {
        super(muleContext);
    }

    private MuleEvent handle(Exception ex, MuleEvent event, RollbackSourceCallback rollbackMethod) {

        logger.warn("Exception: " + ex.getMessage());
        Object payloadBefore = event.getMessage().getPayload();
        MuleEvent result = super.handleException(ex, event, rollbackMethod);
        result.getMessage().setPayload(payloadBefore);

        return result;
    }

    @Override
    public MuleEvent handleException(Exception ex, MuleEvent event) {
        return handle(ex, event, null);
    }

    @Override
    public MuleEvent handleException(Exception ex, MuleEvent event, RollbackSourceCallback rollbackMethod) {
        return handle(ex, event, rollbackMethod);
    }
}
<default-exception-strategy>
    <processor-chain>
        <custom-transformer class="exception.StackTraceTransformer"/>
        <file:outbound-endpoint path="data/exception" outputPattern="#[function:datestamp:yyyyMMddHHmmss].txt"/>
    </processor-chain>
</default-exception-strategy>
public class StackTraceTransformer extends AbstractMessageTransformer {
    public StackTraceTransformer() {
        setName("StackTraceToText");
    }

    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
        StringWriter writer = new StringWriter();
        PrintWriter stream = new PrintWriter(writer);
        Throwable t = ((ExceptionMessage) message.getPayload()).getException();
        t.printStackTrace(stream);
        return writer.toString();
    }
}