Mule:在执行文件出站之前,如何确保负载处于可写状态

Mule:在执行文件出站之前,如何确保负载处于可写状态,mule,Mule,在我的中,我将错误负载写入文件。但有时,当流涉及web服务调用且主机不可用或未知时(例如,抛出java.net.UnknownHostException),负载不再是InputStream或String的实例。若我尝试将错误记录到文件,则会引发以下异常: exception.AbstractExceptionListener (AbstractExceptionListener.java:299) - **********************************************

在我的
中,我将错误负载写入
文件
。但有时,当流涉及web服务调用且主机不可用或未知时(例如,抛出
java.net.UnknownHostException
),负载不再是
InputStream
String
的实例。若我尝试将错误记录到文件,则会引发以下异常:

exception.AbstractExceptionListener (AbstractExceptionListener.java:299) - 
********************************************************************************
Message               : Could not find a transformer to transform "SimpleDataType{type=org.apache.commons.httpclient.methods.PostMethod, mimeType='*/*'}" to "SimpleDataType{type=java.io.InputStream, mimeType='*/*'}".
Code                  : MULE_ERROR-65237
--------------------------------------------------------------------------------
Exception stack is:
1. Could not find a transformer to transform "SimpleDataType{type=org.apache.commons.httpclient.methods.PostMethod, mimeType='*/*'}" to "SimpleDataType{type=java.io.InputStream, mimeType='*/*'}". (org.mule.api.transformer.TransformerException)
  org.mule.registry.MuleRegistryHelper:252 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
org.mule.api.transformer.TransformerException: Could not find a transformer to transform "SimpleDataType{type=org.apache.commons.httpclient.methods.PostMethod, mimeType='*/*'}" to "SimpleDataType{type=java.io.InputStream, mimeType='*/*'}".
    at org.mule.registry.MuleRegistryHelper.lookupTransformer(MuleRegistryHelper.java:252)
    at org.mule.DefaultMuleMessage.getPayload(DefaultMuleMessage.java:355)
    at org.mule.DefaultMuleMessage.getPayload(DefaultMuleMessage.java:313)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

我正在考虑在写入文件之前执行
选择
块,以确保有效负载是可写的。我是否应该执行类似于
#[payload instanceof java.io.InputStream]
的操作?但是,如果负载是
DOM
或其他东西,情况又如何呢?请注意。

< P>我将在catch异常策略中使用一个转换器,并封装有考虑输入并产生可写负载的逻辑。

< P>如果您想检查是否有一个特定负载类型和输出类型的变压器,我想你可以从注册表中查找可用的变压器。在Groovy中:

transformers = message.getMuleContext().getRegistry().lookupTransformers(
   new org.mule.transformer.types.SimpleDataType(payload.getClass()), 
   new org.mule.transformer.types.SimpleDataType(java.io.InputStream))
if (transformers.size() == 0) {
  //set some variable or whatever
}

你的意思是我必须考虑所有可能的有效载荷类型并转换它们?但我的问题是我只想在有效载荷可写时写入文件,我不想转换有效载荷当你不能写入它时你会做什么?只需使用一个简单的记录器状态,无法写入有效负载并出现在这种情况下,我建议您两种选择,基于FileMessageDispatcher在doDispatch方法中所做的工作:///a)实现自定义FileMessageDispatcher以捕获异常并在写入失败时记录消息,并在连接器上设置使用它///b)在消息处理器中使用与doDispatch中类似的逻辑