Mule ESB 3转换器无法转换为MessageProcessor

时间:2012-08-29 14:30:15

标签: mule

我正在尝试遵循将字符串输入转换为URL列表的文档中的转换器示例,但它会引发错误。

示例如下:http://www.mulesoft.org/documentation/display/MULE3USER/Transformer+Annotation#TransformerAnnotation-WorkingwithCollections

我的变压器代码是从他们那里复制粘贴的。

当我第一次这样做时,我通过输入我的配置xml:

来设置变换器
<custom-transformer class="com.test.transformer.StringToListTransformer" doc:name="StringToUrlList"/>

注意到要求“注册”变换器,我后来在文件的开头添加了(在开始标记之后):

<spring:bean id="stringToListTransformer" class="com.test.transformer.StringToListTransformer"/>

但是,当我运行应用程序时,我收到以下错误:

Exception in thread "main" org.mule.module.launcher.DeploymentInitException: IllegalStateException: Cannot convert value of type [com.test.transformer.StringToListTransformer] to required type [org.mule.api.processor.MessageProcessor] for property 'messageProcessors[3]': no matching editors or conversion strategy found

2 个答案:

答案 0 :(得分:3)

您不能将使用@Transformer注释的类作为custom-transformer,因为它不是真正的org.mule.api.processor.MessageProcessor。只有真正的消息处理器可以直接在XML配置中使用并显式调用。

正如doc for @Transformer所说:

  

Mule 3.x中没有机制来实际调用由带注释的方法构造的变换器。

如果您想让变压器在流程中启动,您需要使用:

<auto-transformer returnClass="java.util.List.class"/>

假设它返回一个列表,并且没有其他合适的注册变换器具有更高的优先级。

否则,通过扩展org.mule.transformer.AbstractMessageTransformer创建一个真正的转换器,然后将其与custom-transformer一起使用。

答案 1 :(得分:0)

请使用Java Component而不是Java Transformer ..