gpt4 book ai didi

java - Apache CXF : Forwarding an information from an interceptor to the actual webservice implementation

转载 作者:行者123 更新时间:2023-12-02 08:00:18 24 4
gpt4 key购买 nike

我正在 JBoss6 服务器上运行基于 Apache CXF 2.3.1 的 JAX-WS Web 服务。

我的服务提供了一个函数getWeight。此函数应根据 SOAP header 中的附加信息返回不同单位(公斤、磅)的值。为此,我添加了自己的拦截器:

public class MySoapHeaderInterceptor extends AbstractSoapInterceptor
{
public MySoapHeaderInterceptor()
{
super(Phase.USER_PROTOCOL);
}

...
}

拦截工作正常,我可以解析 SOAP header 中的附加元素,并可以基于此元素设置一个变量:

boolean poundsRequested = true;

现在我的问题出现了。我不知道如何将变量 poundsRequested 转发到我的实际 WebService 实现 MyServiceImpl。这个类正在调用另一个类 ValueReader ,我最终需要来自 SOAP header 的信息。

我已经尝试设置全局静态变量ValueReader.poundsRequested。但这样的解决方案不是线程安全的。两个客户端的调用可能会发生干扰,并且可能会覆盖彼此设置的变量。

总结:我基本上需要能够将变量从 Apache CXF 拦截器转发到实际的 Web 服务实现。此外,该变量的值对于每个请求都必须是唯一的。

最佳答案

在拦截器中,您可以保存传入消息所需的值:

message.put("my.value", value);

在您的实现中,您可以执行以下两项操作之一:

1) 通过 @Resource 事物注入(inject)标准 JAXWS WebServiceContext 并调用

context.getMessageContext().get("my.value");

2) 既然您无论如何都与 CXF 相关,请执行以下操作:

PhaseInterceptorChain.getCurrentMessage().get("my.value");

关于java - Apache CXF : Forwarding an information from an interceptor to the actual webservice implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8987232/

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