2013-06-19 11 views
0

我在我的xml中有類似configs的東西。我必須將兩個參數傳入我的選擇查詢。如何將兩個參數傳遞到Spring Integration的<outbound-gateway>

< 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)] 

任何想法,如何解決這個問題?

有一個參數,它的工作正常。

回答

1

您需要顯示您的<gateway/>配置和service-interface。這個問題在jdbc網關的上游。

它看起來像你試圖添加兩個值作爲有效載荷(你只能在消息上有一個有效載荷),而你的JDBC選擇在單個有效載荷上使用兩個屬性。

你的單個有效載荷需要是一個JavaBean,或地圖,陣列等等

+0

非常感謝@Gary。你能指點我的任何教程,可以幫助我如何使有效載荷javabean或地圖或陣列..在此先感謝..我是新來的SI。 – Jaikrat

+1

看起來您正在探索jdbc樣本;而不是'List findPersonByName(String name);',使用'List findPersonByNameAndId(Person person);'並用'personId'和'name'屬性填充一個Person對象,並且改變你的select語句以使用適當的性質。 –

+0

是的,我做了同樣的工作,它的工作非常好。謝謝你的提示。明天我會用完整的代碼發佈我的答覆。 – Jaikrat

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> 

我有正在接受人OBJ一個服務接口。在調用搜索方法之前設置名稱和ID。

告訴我,如果有人想知道更多的相同。

相關問題