Mule ESB JAXB XML更好地对象变换器?

时间:2012-10-11 18:47:30

标签: jaxb esb mule transformer

Mule 3.3可以使用JAXB自动将XML字符串解组为对象,具体如下:
    1.你首先用spring注册你的jaxb注释类。     2.有一个组件需要输入类型

所以我设法进行了转换,但我不得不创建一个什么都不做的“DumbTransformer”。它有一个返回它接收的同一个对象的方法。我需要它来触发XML到对象的转换,以便我可以进一步处理消息。

流程示例:

<spring:beans>
    <spring:bean id="dumbTransformer" class="foo.bar.DumbTransformer"/>
</spring:beans>

<flow name="main" doc:name="main">
    <vm:inbound-endpoint path="in" doc:name="VM" />
        <component doc:name="Java">
            <spring-object bean="dumbTransformer"/>
        </component>
        <splitter expression="#[payload.items]" doc:name="Split Items"/>
    <logger message="#[payload]" level="INFO" doc:name="Log Item"/>
    <vm:outbound-endpoint path="out" doc:name="VM" />
</flow>

DumbTransformer.java

package foo.bar;

@ContainsTransformerMethods
public class InvoiceUnmarshaller extends AbstractTransformer {

    @Transformer
    public MyJaxbAnnotatedClass foo(@Payload MyJaxbAnnotatedClass i) {
        return i;
    }

}

有没有办法在没有创建这样的DumbTransformers的情况下完成这个?

感谢。

2 个答案:

答案 0 :(得分:3)

正如您所猜测的那样,JAXB反序列化不会发生,因为没有组件可以满足:

  
      
  1. 有一个组件需要输入类型
  2.   

那么如果你有一个自动变压器就可以做到这一点:

<auto-transformer returnClass="foo.bar.MyJaxbAnnotatedClass" />

答案 1 :(得分:1)

Mule XML Module提供OOTB JAXB Transformer。我宁愿尽可能利用mule功能而不是编写自定义代码