我已经开始使用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代码,直到没有别的办法。
答案 0 :(得分:0)
我认为除非改变某些内容或在现有代码周围添加代码,否则我无法做出选择。
Service-Activator针对input-channel
中的每个传入消息执行其功能。并且该功能正是方法调用,其中Message
用作方法参数的上下文。
不确定您将如何处理该有效负载,但使用状态对象(如AdminRequestProcessor
)看起来并不正确。只是不要忘记你可能有许多传入的消息,但服务激活器应该是一致的。
另外,请不要忘记<beans:bean>
是singleton
,因此您的AdminRequestProcessor
只会被实例化一次。
看看你的样本,我建议这样的事情:
expression="new AdminRequestProcessor(payload).testConnection()"/>
如果您真的不想更改代码中的任何内容。
您可以在Reference Manual找到所有其他内容。