我有一个带有默认请求通道的网关和多种方法。
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" />
...
如何获取有关所调用方法的信息?
我知道可以应用静态标头值,但这是唯一的方法吗? 或者我完全错了?
由于
答案 0 :(得分:1)
我们有open JIRA issue for this功能;请投票。
现在,#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>
为所有方法添加方法*
的标头。
答案 1 :(得分: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>
稍晚但对于后来跟随此帖子的人的正确解决方案。