0

我有一个带有默认请求通道和多种方法的网关。

public interface IUserService {
 public void updateUserName(Long id, String username);
 public void updatePassword(Long id, String password);
 ...
}

和以下xml配置

...
<gateway id="userService" service-interface="...IUserService"
         default-request-channel="dataRequestChannel" 
         default-reply-channel="dataResponseChannel" />
...

如何获取有关被调用方法的信息?

我知道可以应用静态标头值,但这是唯一的方法吗?还是我完全错了?

谢谢

4

2 回答 2

1

我们对此功能有一个未解决的 JIRA 问题;请投票。

现在,#method 变量在特定方法声明中的表达式中可用

<int:gateway id="gw"
    service-interface="foo.Gateway"
    default-request-channel="input">
    <int:method name="sendAndReceive">
        <int:header name="gwMethod" expression="#method"/>
    </int:method>
</int:gateway>

但是您仍然必须声明每个方法。

也许另一个相对简单的增强是在方法名称中支持通配符;就像是...

<int:gateway id="gw"
    service-interface="foo.Gateway"
    default-request-channel="input">
    <int:method name="*">
        <int:header name="gwMethod" expression="#method"/>
    </int:method>
</int:gateway>

*将为所有方法添加方法的标头。

于 2013-10-19T18:48:15.830 回答
0

从 3.0.1 开始,您可以执行以下操作来设置通过网关访问的所有方法的标头(您也可以照常管理特定方法)。

我正在展示如何设置两个标头属性,transportType 和 methodType,一个是动态的,一个是静态的:

<int:gateway id="gw" 
    service-interface="foo.async.Gateway" 
    default-request-channel="gateway-request-channel"
    default-reply-channel="gateway-response-channel">
    <int:default-header name="transportType" value="async-msg"/>
    <int:default-header name="methodType" expression="#gatewayMethod.name"/>
</int:gateway>

http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#gateway-configuration-annotations

有点晚了,但对于以后关注此线程的人来说是正确的解决方案。

于 2014-02-21T16:55:22.387 回答