如何在server-activator中将payload设置为constructor-arg值

时间:2016-08-19 16:46:39

标签: spring-integration

我已经开始使用SI,因为我们希望在我们现有的项目中使用SI,以避免我们可以改变。

我们将用作服务激活器的bean接受java对象的构造函数参数。

该对象在有效负载中但是我无法使用service-activator的内部bean使用来设置它

<service-activator input-channel="ADMIN_TEST_CONNECTION" method="testConnection">
  <beans:bean class="mypackage.request.AdminRequestProcessor">
                <beans:constructor-arg value="payload"/>
            </beans:bean>
 </service-activator>

它抱怨无法将[java.lang.String]类型的参数值转换为所需类型。

请帮助了解如何访问有效负载并将其设置为构造函数参数。

如果我通过非构造函数arg路由并更改现有的java对象,那么它将在服务激活器中使用此调用

表达式=&#34; @ bean.testConnection(有效载荷)&#34; /&GT;

但我不希望你改变现有的java代码,直到没有别的办法。

1 个答案:

答案 0 :(得分:0)

我认为除非改变某些内容或在现有代码周围添加代码,否则我无法做出选择。

Service-Activator针对input-channel中的每个传入消息执行其功能。并且该功能正是方法调用,其中Message用作方法参数的上下文。

不确定您将如何处理该有效负载,但使用状态对象(如AdminRequestProcessor)看起来并不正确。只是不要忘记你可能有许多传入的消息,但服务激活器应该是一致的。

另外,请不要忘记<beans:bean>singleton,因此您的AdminRequestProcessor只会被实例化一次。

看看你的样本,我建议这样的事情:

expression="new AdminRequestProcessor(payload).testConnection()"/>

如果您真的不想更改代码中的任何内容。

您可以在Reference Manual找到所有其他内容。