`

创建自定义转换器(Creating Custom Transformers)

    博客分类:
  • mule
阅读更多
作者:wuwenyu | 出处:博客园 | 2011/11/30 9:38:29 | 阅读16

Creating Custom Transformers

一个自定义转换器是实现了org.mule.api.transformer.Transformer接口用户自定义类。你的类可以根据需要继承

AbstractTransformer 或者 AbstractMessageAwareTransformer

该章节将更加详细的描述如何创建一个自定义转换器。

Mule ESB 提供了很多标准化的转换器,包括XML转换器(例如XML转换成Object,XSLT,和DOM转换成XML),

加密转换器能够对数据进行加密和解密,压缩转换器能够对数据进行压缩和解压缩,还有更多。可以参考

Using Transformers提供了一个标准转换器的列表,使用图形化界面创建你的数据转换器,详情参考

Mule Data Integrator.

转换器类(Transformer Classes)

AbstractTransformer 允许你访问和转换你的源数据而且可以根据需要指定你使用的编码。它定义了一些方法控制

转换器所能支持的数据类型,并且验证预期的返回值类型,留给你的只是一个简单的doTransform()方法去实现。

import org.mule.transformer.AbstractTransformer;
 
public class OrderToHtmlTransformer extends AbstractTransformer
{
 public Object doTransform(Object src, String encoding) throws TransformerException
}
如果你需要转换消息头部和附件信息,你可以使用AbstractMessageAwareTransformer 改变直接传递过来的信息。
这种情况下你通过覆写transform(MuleMessage message, String encoding)方法返回转换后的信息,你可以使用
message.getProperty(Object key)来获取属性值,或者使用message.setProperty(Object key, Object value)设置值到
转换后的信息中。
import org.mule.transformer.AbstractMessageAwareTransformer;
 
public class OrderToHtmlTransformer extends AbstractMessageAwareTransformer
{
 public Object transform(MuleMessage message, String encoding) throws TransformerException
}

注册源数据和返回值类型(Registering Source and Return Types)


你可以设定一个转换器所能接收的源数据类型和返回值类型,这允许在调用转换器之前先验证传入的信息并且在传出的时候
也验证下传出信息,如果你创建了discoverable transformer必须设定源和返回值类型。如下例子:
一个Order bean传递给HTML 转换器,你需要在构造函数中设定你需要转换的类型为Order

public class OrderToHtmlTransformer extends AbstractMessageAwareTransformer
{
 public OrderToHtmlTransformer() {
registerSourceType(Order.class);
setReturnClass(String.class);
setName("OrderToHTML");
}

因为源类型指定之后你就不需要在方法transform()中做类型校验了,不过,如果你添加了多个源类型的话,你就得在方法
transform()
中对每一种类型都进行校验。
注意以上的代码同时也设置了转换器的名字,通常情况下你可以在Mule配置文件中设置转换器的名字,如果这个名字没有
被设置,Mule将根据源类型和返回值类型生成一个名字,如上面的例子如果没有指定名字的话将返回"OrderToString"名字。

使用转换器生命周期方法(Using Transformer Lifecycle Methods)


在Mule中的所有对象都有它的生命周期,对应转换器而言,有两个最常用的生命周期方法。
默认情况下 AbstractMessageAwareTransfromerAbstractTransformer都继承自org.mule.api.lifecycle.Initialisable接口。
转换器中所有的bean属性被设置之后,这个doInitialise()方法将被调用,这有助于转换器做一些初始化和校验工作,例如,一个
转换器要求在转换器操作之前先加载一个外部文件则可以在doInitialise()方法中实现。
如果你想在你的转换器不再使用的时候清除所有资源,你可以实现接口org.mule.api.lifecycle.Disposable,实现里面的dispose()
方法。

创建可被发现的转换器(Creating Discoverable Transformers)


Mule能自动执行转换器,例如当你在MuleMessage中调用一个getPayload()方法的时候,并且通过了要求的类型,如下:

Document doc = (Document)muleMessage.getPayload(org.dom4j.Document.class);

Mule检查当前的payload类型尝试着查找一个能够将其转换成org.dom4j.Document类型的转换器,Mule提供了一些标准的
转换器在一些如byte[],String,inputStream等类型中进行交换,同时
transports通常有一些转换器来指定消息类型,如JMSMessage 或者 HttpRequest,
当你创建一个自定义转换器的时候可以设置它的优先级高于其它标准的转换器以便它能获取优先权。
为了使你的转换器可现,它必须实现接口org.mule.api.transformer.DiscoverableTransformer,该接口引进了两个方法:
getPriorityWeighting() and setPriorityWeighting(int weighting),当两个或者两个以上的转换器匹配查询标准的时候,权重weighting用来解决冲突,
这个权重值在1-10之间,而10拥有最高权重,作为一种规则,mule中的转换器拥有的权重为1这样低于任何自定义的转换器。
如下例子使得
OrderToHtmlTransformer可被发现,你必须如下定义:

public class OrderToHtmlTransformer 
extends AbstractMessageAwareTransformer 
implements DiscoverableTransformer
{
 private int weighting = DiscoverableTransformer. DEFAULT_PRIORITY_WEIGHTING + 1;
 
 int getPriorityWeighting() {
 return weighting;
}
 
void setPriorityWeighting(int weighting) {
 this.weighting = weighting;
}
} 

这个转换器将Order对象转换成String对象,这就是标准的ObjectToString转换器的做法,但是ObjectToHtml被使用是因为它有更高的权重,
可以通过下面的例子来测试:

MuleMessage message = new DefaultMuleMessage(new Order(...));
String html = (String)muleMessage.getPayload(java.lang.String.class);

注册转换器(Registering the Transformer)


创建完转换器之后,你必须将它注册以便Mule能够在运行时发现它,你可以在Mule配置文件中通过<custom-transformer>来注册。
此外,如果你想让你的转换器当你的项目在类路径中被mule自动加载的话,你必须添加
registry-bootstrap.properties文件到你
/META-INF/services/org/mule/config
目录下的JAR文件,registry-bootstrap.properties文件内容看起来如下:
orderToHtml=com.foo.OrderToHtml
当mule启动的时候,bootstrap文件将在任何配置文件加载之前被发现并且安装所有在文件中注册的对象。更多信息参考:Bootstrapping the Registry.

例子(Examples)


创建一个消息头中包含有transactionId的HTML消息,你必须继承AbstractMessageAwareTransformer,并且实现transform()方法:

public Object transform(MuleMessage message, String encoding) throws TransformerException
{
Order order = (Order)message.getPayload();
 StringBuffer html = new StringBuffer();
html.append("");
html.append("");
html.append("");
html.append("Dear ").append(order.getCustomer().getName()).append(" ");
html.append("Thank you for your order. Your transaction reference is: <strong>");
html.append(message.getProperty("transactionId").append("</strong>");
html.append("("");
 return html.toString();
}

Hello World example例子中定义了一个名为StdinToNameString自定义转换器,从字符串中删除换行符和新行,

package org.mule.example.hello;

import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractTransformer;

public class StdinToNameString extends AbstractTransformer
{
 public StdinToNameString()
{
 super();
 this.registerSourceType(String.class);
 this.setReturnClass(NameString.class);
}

 public Object doTransform(Object src, String encoding) throws TransformerException
{
NameString nameString = new NameString();
 String name = (String) src;
nameString.setName(name.replaceAll("\r", "").replaceAll("\n", "").trim()); 
 return nameString;
}
}

这个转换器定义如下:

<custom-transformer name="StdinToNameString" class="org.mule.example.hello.StdinToNameString" /> 
...
<service name="GreeterUMO">
 <inbound>
 <stdio:inbound-endpoint system="IN" transformer-refs="StdinToNameString" /> 
 </inbound>
...
原文地址:http://www.mulesoft.org/documentation/display/MULE2USER/Creating+Custom+Transformers
分享到:
评论

相关推荐

    mule ESB 3 user guider

    手册中也包含了创建自定义转换器(transformers)和拦截器(interceptors)的指导。 8. 注解和绑定: 用户指南中还介绍了如何使用各种注解(annotations)来创建服务对象和转换器,以及如何通过注解来配置组件。...

    ts-transformers-plantain:一些自定义打字稿转换器

    一些自定义打字稿转换器。 安装 yarn add ts-transformers-plantain 特征 executeCodeTransformer 对于每个语句,在控制台日志前添加文件名和行号,因此执行该语句时,文件名和行号将记录在控制台中。 例如: ...

    Python库 | transformers-3.0.2.tar.gz

    《Python库 Transformers 3.0.2:深度学习与自然语言处理的利器》 Python库Transformers是由Hugging Face团队开发的一个强大工具包,主要用于自然语言处理(NLP)任务,如文本分类、问答系统、机器翻译等。该库的...

    mule学习文档

    4. **创建自定义转换器**:教授如何创建自定义转换器以适应特定的需求。 - **使用注解创建服务对象和转换器**:介绍如何利用注解简化转换器的创建过程。 - **创建自定义转换器类**:详细介绍自定义转换器类的创建...

    Mule_ESB_3_User_Guide.pdf

    文档介绍了如何配置Java组件、使用拦截器、转换器,以及创建自定义转换器。 - **Interceptors(拦截器)**: 用于在消息处理前后插入自定义逻辑,拦截器可以对消息进行修改或执行副作用操作。 - **Transformers...

    2018FME转换器参考手册.rar

    FME工作区是FME的核心,它是由读者(Readers)、转换器(Transformers)和写入者(Writers)组成的图形化界面。读者用于读取源数据,转换器用于处理和修改数据,而写入者则负责将处理后的数据输出到目标格式。 2. ...

    PyPI 官网下载 | transformers-4.7.0-py3-none-any.whl

    此外,`transformers`还支持自定义训练,允许开发者在现有模型基础上进行微调,以适应特定任务或领域。 在实际开发中,使用`transformers-4.7.0-py3-none-any.whl`这样的wheel文件有诸多优势。首先,安装过程比普通...

    Transformers

    标题中的"Transformers"指的是变形金刚,这在IT领域可能是指一种设计模式或者与图形、字体设计相关的主题。然而,考虑到提供的标签是“字体”,我们可以推测这里的核心知识点是与变形金刚主题相关的字体设计。 ...

    No module named ‘transformers.models.auto.tokenization-auto‘

    它负责将文本转换为模型可以理解的数字序列,这个过程通常包括分词(tokenization)、添加特殊标记(如开始和结束标记)、归一化(如小写转换)等步骤。`AutoTokenizer.from_pretrained('gpt2')`可以用来创建一个与...

    分别基于LSTM、Transformers和自定义模型实现ETTh1数据集时间序列预测源码+项目说明.zip

    新毕业设计-分别基于LSTM、Transformers和自定义模型实现ETTh1数据集时间序列预测源码+项目说明.zip 【项目介绍】 该项目是一个用于ETTh1数据集的时间序列预测的工具。它包含了LSTM、Transformers和自定义模型等多种...

    Transformers学习-代码环境配置

    在进行Transformers学习之前,首要任务是正确地配置代码环境,确保所有必要的工具和库都能正常运行。本教程将指导你完成Windows 11系统下的环境配置步骤。 首先,我们需要下载代码文件。Transformers库通常与相关的...

    swift-Transformers可以方便地将JSON数据转换为支持Codable协议的Model

    在使用`swift-Transformers`时,你还可以自定义转换规则,处理那些不符合标准JSON结构的特殊情况。这可以通过扩展`Transformer`类并重写相应的方法来实现。 在`Transformers-master`这个压缩包文件中,可能包含了`...

    Laravel开发-laravel-transformers

    这个库,由Phil Sturgeon创建,是专门为Eloquent ORM设计的,它允许我们将数据库模型转换为JSON或其他所需的格式,以便更方便地传输和展示给前端或API消费者。 首先,让我们深入了解什么是“变形金刚”...

    PyPI 官网下载 | pytorch-fast-transformers-0.2.2.tar.gz

    《PyTorch Fast Transformers库详解》 在Python的深度学习领域,PyTorch是一个不可或缺的框架,它提供了灵活且强大的工具来构建和训练神经网络。而PyTorch Fast Transformers是针对Transformer模型的一个优化库,...

    PyPI 官网下载 | transformers-0.1.tar.gz

    《PyPI官网下载 | transformers-0.1.tar.gz——深入理解Python库transformers》 在Python的世界里,PyPI(Python Package Index)是广大开发者获取和分享开源软件包的重要平台。今天我们要关注的是一个名为...

    Mule_Studio_用户手册.pdf

    - **自定义转换器(Custom Transformer)**:允许开发者自定义转换逻辑。 - **Object-to-XML/JSON转发器**:将Java对象转换为XML或JSON字符串。 - **脚本转换器(Script Transformer)**:使用脚本语言(如Groovy)...

    fme 内置的函数功能介绍

    #### 二、3D 转换器 (3D Transformers) 3D转换器用于创建和修改三维表面及实体几何。这些转换器能够增强空间数据的可视化效果,对于地形建模、城市规划等领域非常有用。 - **功能**:包括但不限于创建三维模型、...

    Laravel开发-laravel-model-transformers

    4. **自定义逻辑**: Transformer类中可以添加自定义的转换逻辑,比如格式化日期、计算字段值等。 5. **隐藏属性**: 可以指定不想在输出中显示的属性,保护敏感信息。 6. **包含和排除**: 可以控制是否包含或排除...

    PyPI 官网下载 | sentence-transformers-0.4.1.1.tar.gz

    标题中的"PyPI 官网下载 | sentence-transformers-0.4.1.1.tar.gz"指的是Python的包管理器PyPI(Python Package Index)上发布的sentence-transformers库的一个特定版本,0.4.1.1。PyPI是Python开发者发布和分享自己...

    Transformers for Natural Language Processing.pdf

    《Transformers for Natural Language Processing》是一本深入探讨自然语言处理(NLP)领域的专著,主要聚焦于Transformer架构,这是由Google等领先科技公司引入的一种革新性深度学习模型。本书旨在教你如何使用...

Global site tag (gtag.js) - Google Analytics