我有代码
<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对象与地图,字符串但相同的错误。 请告诉我如何在这种情况下通过有效载荷。
答案 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);
它工作正常。