如何将两个参数传递给Spring Integration </outbound-gateway>的<outbound-gateway>

时间:2013-06-19 12:07:06

标签: xml spring-integration

我的xml中有类似下面的配置。我必须将两个参数传递给我的选择查询。

< int-jdbc:outbound-gateway data-source="datasource"
                            update="UPDATE DUMMY SET DUMMY_VALUE='test'"
                            request-channel="findPersonRequestChannel" 
                            query="select * from Person where lower(name)=:payload[name] and id =:payload[id]"
                            reply-channel="findPersonReplyChannel"                                
                            row-mapper="personResultMapper"
                            max-rows-per-poll="100" >
< /int-jdbc:outbound-gateway >

通过上述方式获取例外情况: -

Caused by: org.springframework.integration.MessagingException: At most one parameter (or expression via method-level @Payload) may be mapped to the payload or Message. Found more than one on method [public abstract java.util.List org.springframework.integration.samples.jdbc.service.PersonService.findPersonByName(java.lang.String,java.lang.String)]

任何想法,如何解决此错误?

有一个参数,它的工作正常。

2 个答案:

答案 0 :(得分:1)

您需要显示<gateway/>配置和service-interface。此问题是jdbc网关的上游。

看起来您正在尝试将两个值添加为有效负载(消息上只能有一个有效负载),而JDBC选择在单个有效负载上使用两个属性。

您的单个​​有效负载需要是JavaBean,或Map,数组等。

答案 1 :(得分:0)

<int-jdbc:outbound-gateway data-source="datasource"     
                           request-channel="findPersonRequestChannel" 
                           query="select * from Person where name=:name and id=:id"
                           reply-sql-parameter-source-factory="requestSource1"
                           reply-channel="findPersonReplyChannel"                                
                           row-mapper="personResultMapper"
                           max-rows-per-poll="100">
</int-jdbc:outbound-gateway>


<bean id="requestSource1" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
    <property name="parameterExpressions">
        <map>
            <entry key="name" value="payload.name"/>
            <entry key="id" value="payload.personId"/>
        </map>
    </property>
</bean>

我有一个接受Person obj的服务接口。在调用搜索方法之前设置名称和ID。

告诉我,如果有人想了解更多信息。