2016-10-04 1 views
0

ich habe Codewie Parameter @Payload passieren

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

und Java-Schnittstelle

public interface PartnerService { 

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

ich es nenne

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

aber Ich erhalte Ausnahme EL1007E: (Pos 0): Immobilien oder Feld ‚Partnerid‘ kann nicht gefunden werden mich auf null

bitte sagen, wie ich Nutzlast passieren kann. Ich versuchte, Message-Objekt mit einer Karte, String aber gleichen Fehler übergeben. Bitte sagen Sie mir, wie kann ich Nutzlast in diesem Fall übergeben.

Antwort

2

@Payload („Partnerid“)

An diesem Punkt gibt es kein Objekt für den Spel Ausdruck gegen ausgewertet werden.

Es muss entweder eine wörtliche

@Payload("'partnerId'") 

oder auf eine andere Bohne beziehen sein.

Außerdem erwarten Sie auf Ihrem Adapter, dass die Nutzlast eine Karte mit Schlüssel partnerId ist.

expression="payload['partnerId']" 

Das wird also nicht funktionieren.

Wenn Sie eine Variable übergeben möchten, sollten Sie etwas tun ...

öffentliche Schnittstelle Partnerservice {

List<QueueConfiguration> findConfig(MyClass param); 

Wo MyClass eine Eigenschaft 'Partnerid' hat.

oder

List<QueueConfiguration> findConfig(String partnerId); 

und

expression="payload" 

Ich schlage vor, Sie einige reading mehr tun.

+0

danke ich habe den Code mit Parameter geändert. –

0

i geändert meinen Code

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

}

und den Anruf es wie

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

und es funktioniert gut.

Verwandte Themen