我的Service Activator可以将重载函数设置为SPEL表达式中的Method

时间:2015-07-17 20:00:56

标签: spring-integration

我有一个看起来像这样的网关

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

我声称可以找到它(我可以看到),但框架认为它不能。有人可以帮助我找到我的方式错误。我不确定这是否真的有效,虽然看起来应该如此。

我假设我不能有一个指向重载函数的表达式。

1 个答案:

答案 0 :(得分:0)

我认为这是SpEL compiler的问题,它为第一次调用动态生成该表达式的类。

与此同时,我试图重现它,针对您的特定情况尝试此解决方案:

<int:header-enricher>
        <int:header name="routingKey" ref="routingKeyResolver" method="resolveReoutingKey"/>
</int:header-enricher>