我有一个看起来像这样的网关
public interface MetadataIngestNotificationGateway {
public boolean sendMetadataNotification(MetadataNotification notification);
public boolean sendMetadataAssociationNotification(MetadataAssociationNotification notification);
}
我有一个看起来像这样的标题扩充器
<int:header-enricher>
<int:header name="routingKey" expression="@routingKeyResolver.resolveRoutingKey(payload)" />
</int:header-enricher>
我有一个看起来像这样的类(它的routingKeyResolverBean)
public class RoutingKeyResolver {
public String resolveRoutingKey(MetadataNotification obj) throws UnknownHostException {
//...
returns someStringBasedOnThisObject;
}
public String resolveReoutingKey(MetadataAssociationNotification obj) throws UnknownHostException {
//...
return someStringBasedOnThiObject;
}
}
它看起来应该可以工作,但我最终得到了这个错误。
Method call: Method resolveRoutingKey(MetadataAssociationNotification) cannot be found on RoutingKeyResolver type
我声称可以找到它(我可以看到),但框架认为它不能。有人可以帮助我找到我的方式错误。我不确定这是否真的有效,虽然看起来应该如此。
我假设我不能有一个指向重载函数的表达式。
答案 0 :(得分:0)
我认为这是SpEL compiler的问题,它为第一次调用动态生成该表达式的类。
与此同时,我试图重现它,针对您的特定情况尝试此解决方案:
<int:header-enricher>
<int:header name="routingKey" ref="routingKeyResolver" method="resolveReoutingKey"/>
</int:header-enricher>