2016-10-04 259 views
0

我有代碼如何傳遞參數@Payload

<int:channel id="partnerConfigChannel" /> 
 
<int:gateway id="partnerService" service-interface="org.service.PartnerService" 
 
\t \t default-request-timeout="5000" default-reply-timeout="5000"> 
 
\t \t <int:method name="findConfig" request-channel="partnerConfigChannel" /> 
 
</int:gateway> 
 

 
<int-jpa:retrieving-outbound-gateway entity-manager="entityManager" 
 
\t \t request-channel="partnerConfigChannel" 
 
\t \t jpa-query="select q from QueueConfiguration q where q.partnerId = :partnerId"> 
 
\t \t <int-jpa:parameter name="partnerId" expression="payload['partnerId']" /> 
 
</int-jpa:retrieving-outbound-gateway>

和Java接口

public interface PartnerService { 

    @Payload("partnerId") 
    List<QueueConfiguration> findConfig(); 
} 

我打電話它

List<QueueConfiguration> qc= partnerService.findConfig(); 

但我得到異常 EL1007E:(POS 0):屬性或字段「PARTNERID」不能爲null找到

請告訴我如何能夠通過有效載荷。我嘗試通過傳遞消息對象與地圖,字符串,但同樣的錯誤。 請告訴我如何在這種情況下通過有效載荷。

回答

2

@Payload( 「PARTNERID」)

此時,存在着對被評估爲使用SpEL表達沒有對象。

它要麼必須是文字

@Payload("'partnerId'") 

或者參考一些其他的bean。

此外,在您的適配器上,您希望有效負載是帶有密鑰partnerId的地圖。

expression="payload['partnerId']" 

所以這是行不通的。

如果你想傳遞一個變量,你應該做這樣的事情...

公共接口PartnerService {

List<QueueConfiguration> findConfig(MyClass param); 

如果MyClass的有一些財產 'PARTNERID'。

List<QueueConfiguration> findConfig(String partnerId); 

expression="payload" 

我建議你做一些更多的reading

+0

謝謝我用參數修改了代碼。 –

0

我修改了代碼

public interface PartnerService { 
List<QueueConfiguration> findConfig(@Payload Message msg); 

}

,並調用它像

Map msgMap=new HashMap(); 
msgMap.put("partnerId", partnerId); 
Message msg=MessageBuilder.withPayload(msgMap).build(); 
List<QueueConfiguration> qc= partnerService.findConfig(msg); 

,它是工作的罰款。