如何传递参数@Payload

时间:2016-10-04 10:47:46

标签: spring-integration

我有代码

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

<int-jpa:retrieving-outbound-gateway entity-manager="entityManager"
		 request-channel="partnerConfigChannel"
		jpa-query="select q from QueueConfiguration q where q.partnerId = :partnerId">
		<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):无法在null上找到属性或字段'partnerId'

请告诉我如何通过有效载荷。我尝试通过传递Message对象与地图,字符串但相同的错误。 请告诉我如何在这种情况下通过有效载荷。

2 个答案:

答案 0 :(得分:2)

@Payload(&#34; PARTNERID&#34)

此时,没有对象可以对SpEL表达式进行评估。

它需要是文字

@Payload("'partnerId'")

或者参考其他一些bean。

此外,在适配器上,您希望有效负载是带有密钥partnerId的映射。

expression="payload['partnerId']"

所以这不会奏效。

如果你想传递一个变量,你应该做这样的事情......

public interface PartnerService {

List<QueueConfiguration> findConfig(MyClass param);

MyClass有一些属性&#39; partnerId&#39;。

List<QueueConfiguration> findConfig(String partnerId);

expression="payload"

我建议您再做一些reading

答案 1 :(得分:0)

我修改了我的代码

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app.config");

}

和它的呼叫

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

它工作正常。