gpt4 book ai didi

java - jax-rs Apache CXF,在拦截器之间传输数据

转载 作者:行者123 更新时间:2023-11-30 06:27:43 25 4
gpt4 key购买 nike

让我有两个拦截器。 Phase.RECEIVE 处的输入拦截器和Phase.SETUP_ENDING

处的输出拦截器
public class BeforeInterceptor extends AbstractPhaseInterceptor<Message> 
{
public BeforeInterceptor()
{
super(Phase.RECEIVE);
}

public class AfterInterceptor extends AbstractPhaseInterceptor<Message> 
{
public AfterInterceptor()
{
super(Phase.SETUP_ENDING);
}

现在我想知道:这两个阶段之间有多少时间?
我必须在 BeforeInterceptor 中调用 System.currentTimeMillis();,将这个值传递给 AfterInterceptor,然后调用
System.currentTimeMillis() - valueFromBeforeInterceptor 在拦截器之后。

但是我怎样才能从一个拦截器向另一个拦截器传输数据呢?

最佳答案

要在同一链中的两个拦截器(即两个“in”拦截器或两个“out”拦截器)之间传递数据,您可以在 Message

上存储任意值
// BeforeInterceptor
message.put("com.example.MyApp.startTime", System.currentTimeMillis());

// AfterInterceptor
long totalTime = System.currentTimeMillis() -
(Long)message.get("com.example.MyApp.startTime");

如果一个拦截器在“in”链中而另一个在“out”链中,那么您可以使用 Exchange 来达到相同的目的:

// BeforeInterceptor
inMessage.getExchange().put("com.example.MyApp.startTime", System.currentTimeMillis());

// AfterInterceptor
long totalTime = System.currentTimeMillis() -
(Long)outMessage.getExchange().get("com.example.MyApp.startTime");

无论您使用哪个拦截器,最好选择您确定不会与任何其他拦截器冲突的键,例如通过使用 Java 包样式的分层名称。

关于java - jax-rs Apache CXF,在拦截器之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com