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中类似的逻辑