首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写自己的Spring PayloadTransformer并加载它

编写自己的Spring PayloadTransformer并加载它
EN

Stack Overflow用户
提问于 2019-01-07 22:47:55
回答 1查看 72关注 0票数 0

我目前正在使用citrus-framework来测试一个应用程序。我的一个接口使用Protobuf,我想实现一个与spring集成兼容的protobuf- to -json-transformer,类似于下面的用法,但使用我的transformer而不是object- to -string-string:

代码语言:javascript
复制
<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一模一样的原型,我用以下命令加载:

代码语言:javascript
复制
<bean id="Proto2Json" class="com.nobody.citrus.transformer.ProtoToJSONString">
    <property name="input-channel" value="none"/>
    <property name="output-channel" value="none"/>
</bean>

但它失败了。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 23:13:13

是这样的。您确实需要遵循ObjectToStringTransformer中的设计来实现您自己的AbstractPayloadTransformer。在您的应用程序上下文中,它必须是一个普通的<bean>定义。

唯一的问题是,你不明白为什么我们真的有那么多自定义标记来利用input-channeloutput-channel属性。例如,这个<int:object-to-string-transformer>为应用程序上下文提供了几个bean,包括前面提到的ObjectToStringTransformer实例、一个MessageTransformingHandler,最后是连接MessageHandlerinputChannelConsumerEndpointFactoryBean

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

代码语言:javascript
复制
<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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54076591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档