我正在使用Apach CXF作为REST提供程序。
我想在进入Web服务时收集数据,在进入响应库之前收集数据,并向响应中添加一些计算。对于这个问题,为了简单起见,假设我要获取输入的开始时间,发送响应之前的完成时间,并将总时间添加到响应中。
现在,我该怎么做?我创建了可以单独使用的In和Out拦截器,但是如何在Out拦截器中使用In拦截器中的数据呢?
谢谢
伊多布
更新:
我试图将数据设置为上下文参数
message.setContextualProperty(key,value);
但是我在上得到NULL
message.getContextualProperty(key);
我也尝试过相同的方法
message.put(key,value) and message.get(key)
没用。
主意的人吗?
谢谢,
伊多布
最佳答案
您可以将值存储在 Exchange
上。 CXF为每个请求创建一个Exchange
对象,以充当请求/响应对的输入和输出消息的容器,并使这两个对象都可以作为message.getExchange()
进行访问。
在拦截器中:
public void handleMessage(Message inMessage) throws Fault {
inMessage.getExchange().put("com.example.myKey", myCustomObject);
}
拦截器
public void handleMessage(Message outMessage) throws Fault {
MyCustomObject obj = (MyCustomObject)outMessage.getExchange().get("com.example.myKey");
}
(反之亦然,对于客户端拦截器,其中out将存储值,而in将检索值)。选择一个您知道不会被其他拦截器使用的 key -带有包名的名称是一个不错的选择。请注意,像
Message
一样,Exchange
是StringMap
,并且具有通用的put/get方法(将Class
作为键),从而为您提供了编译时类型的安全性,并省去了强制转换的麻烦:theExchange.put(MyCustomObject.class, new MyCustomObject());
MyCustomObject myObj = theExchange.get(MyCustomObject.class);
关于java - Apache CXF-在In和Out拦截器之间共享数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12687235/