gpt4 book ai didi

java - 在服务器端 JAX-WS Webservice 上的请求 messageHeader 中设置 ThreadLocal 和 Id 的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-01 09:58:18 47 4
gpt4 key购买 nike

我有一个向客户端公开的 JAX-WS Webservice。当客户端调用它时,messageheader 将填充UserId。当请求来自客户端时,我尝试使用实用程序类在线程本地中设置此值,并在将响应发送回客户端之前将其删除,以便可以使用该线程范围的该变量从任何地方访问它。实现此目的的最佳方法是什么。我可以使用服务器端过滤器,还是必须使用Jax-Ws 处理程序来初始化此值。我们还可以删除在使用 Jax-ws 处理程序发送响应之前使用此值。

还有其他方法可以实现吗?

最佳答案

假设消息头您指的是 SOAP <Header> (而不是HTTP header ):

如果您使用 Servlet Filter ,要检索并设置线程本地,您必须自己解析 SOAP XML 才能访问 UserId 值。

如果您使用 JAX-WS 处理程序,则 SOAP 已被解析为对象模型。如果您只需将 UserId 值传递到应用程序的 Web 服务部分,则在处理程序中您只需在 SOAPMessageContext 上设置该值即可。就像example here一样。您还可以根据指定设置本地线程。至remove或者清除 threadlocal,您可以使用 servlet 过滤器或简单地检查 MESSAGE_OUTBOUND_PROPERTY关于SOAPMessageContext在您的处理程序中:如果是入站,则您的处理程序将在 Web 服务请求上调用,因此您需要读取消息 header 并设置 threadlocal 值。如果是出站,则系统会要求您的处理程序处理 Web 服务响应,因此您需要 remove .

关于java - 在服务器端 JAX-WS Webservice 上的请求 messageHeader 中设置 ThreadLocal 和 Id 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018474/

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