MULE 自定义Transformer&抛出自定义异常提示信息简单使用例子

工具版本
mule-standalone3.9.0
Anypoint-Studio6.4.0

写在前面
在一个Flow中,往往单靠mule提供的标准transformer元素是不足以达到某些转换payload的要求,当然这时候一般是选择使用编写自定义transformer来完成某些业务需要的数据转换。

java transformer图标

java transformer配置

自定义的java transformer一般继承AbstractMessageTransformerAbstractTransformer,按照官方文档说明,后者只获取payload的内容,前者除了payload外可以获取头信息和附件内容。

AbstractTransformer allows you to access and transform the source payload and to specify the encoding to use
If you need to transform the message header and attachments, you can use AbstractMessageTransformer instead to change them directly on the message passed in.

例子里面继承AbstractMessageTransformer,继承后,可以看到生成的java类TestTransformer.java里面实现抽象方法transformerMessage

抽象方法transformerMessage代码

    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
        // TODO Auto-generated method stub
        return null;
    }

对payload的转换处理均在这个方法里面进行,通过该方法的参数可以获取MuleMessage以及输出编码信息。拿到MuleMessage可以做的东西太多,相信键入.get后AnypointStudio会提示你的^_^ , 返回值是一个Object,这个Object就是payload,因此通过自定义java transformer不仅仅可以转换处理payload,还能替换掉原始payload换上你所需的内容。
自定义java transformer有时在转换过程中失败了,这时候抛出异常提示相信是一般都需要做的,而观察可以看到抽象方法transformMessage本身抛出异常TransformerException,假如现在转换一个日期失败,该如何抛出这个异常并给出合理的异常信息?
查阅异常TransformerException文档:TransformerException click here 可以知道,它的实例化一般需要org.mule.config.i18n.MessageMessage文档:Message Click here
那是不是可以编写类似下面的代码:

        Message mes = new Message(构造参数);
        TransformerException transformerException = new TransformerException(mes);

但实际编写会发现不行,因为Message不能通过构造函数实例化,它的构造函数是protected类型。

不能直接实例化org.mule.config.i18n.Message

总不能抛出一个TranformerException异常都这么困难吧,毕竟在java中抛出一个异常写一个int i = 1 / 0;就可以了,最后找到了获取org.mule.config.i18n.Message的方法。
那即是使用org.mule.config.i18n.MessageFactory,文档:MessageFactory click here,这个MessageFactory提供createStaticMessage()方法,该方法接受一个String字符串,这样就可以通过它来创建带自定义异常信息的Message了。

TestTransformer.java代码

package testproject;

import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.config.i18n.Message;
import org.mule.config.i18n.MessageFactory;
import org.mule.transformer.AbstractMessageTransformer;

public class TestTransformer extends AbstractMessageTransformer {

    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
        try {
            //模拟转换失败抛出异常
            int i = 1 / 0;
        } catch(Exception e) {
            Message mes = MessageFactory.createStaticMessage("转换日期失败!");
            TransformerException transformerException = new TransformerException(mes);
            throw transformerException;
        }
        return null;
    }

}

运行结果

参考资料
创建自定义Transformer官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值