编写自己的Spring PayloadTransformer并加载它

时间:2019-01-07 14:47:55

标签: spring-integration citrus-framework

我目前正在使用柑橘框架测试应用程序。 我的接口之一使用Protobuf,我想实现一个与弹簧集成兼容的protobuf-to-json-transformer,使其与以下类似,但与我的转换器而不是object-to-string-transformer一起使用: / p>

<int:channel id="configRawReplies" />

<int:object-to-string-transformer id="configtransformer" input-channel="configRawReplies" output-channel="configResponse" />

<int:channel id="configResponse">
    <int:queue />
</int:channel>

目前,我有一个与object-to-string-transformer完全一样的原型,并在其中加载:

<bean id="Proto2Json" class="com.nobody.citrus.transformer.ProtoToJSONString">
    <property name="input-channel" value="none"/>
    <property name="output-channel" value="none"/>
</bean>

但是失败。

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Proto2Json' defined in URL [file:/Users/nobody/DevOops/test/citrus-scala/target/test-classes/citrus-context.xml]: 
Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: 
Invalid property 'input-channel' of bean class [com.pme.citrus.transformer.ProtoToJSONString]: 
Bean property 'input-channel' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

有人有想法或提示可以在网上找到什么地方吗?

BR

1 个答案:

答案 0 :(得分:1)

是的。您确实需要遵循ObjectToStringTransformer中的设计来实现自己的AbstractPayloadTransformer。在您的应用程序上下文中,该定义必须是简单的<bean>定义。

只有一个问题,您不明白为什么我们真的拥有所有这些自定义标签来同时利用input-channeloutput-channel属性。关键是,例如,这个 <int:object-to-string-transformer>为应用程序上下文提供了几个bean,包括提到的ObjectToStringTransformer实例,一个MessageTransformingHandler以及最后一个ConsumerEndpointFactoryBean来连接一个MessageHandlerinputChannel

因此,您缺少的是自定义<int:transformer>实现的通用AbstractPayloadTransformer定义:

<bean id="Proto2Json" class="com.nobody.citrus.transformer.ProtoToJSONString"/>

<int:tranformer ref="Proto2Json" input-channel="configRawReplies" output-channel="configResponse"/>

请阅读更多参考手册,以避免以后再进行类似的讨论:

https://docs.spring.io/spring-integration/reference/html/overview.html#programming-tips

https://docs.spring.io/spring-integration/reference/html/messaging-transformation-chapter.html