You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK8升级至JDK17后SOAP客户端HTTP请求头丢失问题

问题分析与解决方案

核心原因

JDK 17移除了内置的JAX-WS实现,且当前混用了Java EE时代的jaxws-rt 2.3.5与Jakarta EE依赖(如jakarta.annotation-api 2.1.1),导致MessageContext上下文传递机制不兼容,无法正常获取HTTP请求头。同时,代码中若仍使用旧的javax包路径的MessageContext,也会引发此问题。

解决方案步骤

1. 统一依赖到Jakarta兼容版本

将JAX-WS相关依赖替换为支持JDK 11+的Jakarta版本,确保依赖体系一致:

<!-- 替换原有jaxws-rt为Jakarta版本 -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>3.0.2</version> <!-- 适配Jakarta EE 9,支持JDK11+ -->
</dependency>

<!-- 替换saaj-impl为对应Jakarta版本 -->
<dependency>
    <groupId>com.sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>3.0.2</version>
</dependency>

<!-- 移除jakarta.annotation-api,jaxws-rt 3.0.2已包含兼容的Jakarta注解依赖 -->

2. 修正代码中的包路径导入

将代码中MessageContext相关的导入从javax替换为jakarta:

// 替换前
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPMessageContext;

// 替换后
import jakarta.xml.ws.handler.MessageContext;
import jakarta.xml.ws.handler.soap.SOAPMessageContext;

3. 验证客户端处理器配置

确保SOAP客户端的处理器实现Jakarta版本的Handler接口:

public class CustomSOAPHandler implements jakarta.xml.ws.handler.soap.SOAPHandler<jakarta.xml.ws.handler.soap.SOAPMessageContext> {
    @Override
    public boolean handleMessage(SOAPMessageContext context) {
        // 尝试获取HTTP请求头
        Map<String, List<String>> headers = (Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS);
        // 后续业务逻辑...
        return true;
    }

    // 实现其他必要方法:getHeaders、handleFault、close
}

4. 额外配置(若仍存在问题)

若上述步骤后仍无法获取,可在创建客户端Port时添加属性,强制启用HTTP头传递:

Service service = Service.create(wsdlURL, serviceName);
MyPort port = service.getPort(MyPort.class);

// 添加JAX-WS RI特定属性,确保HTTP头被传递到处理器
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put("com.sun.xml.ws.client.handle.http.headers", true);

验证

完成上述修改后,重新构建项目并测试SOAP客户端请求,此时MessageContext.HTTP_REQUEST_HEADERS应能正常返回请求头Map。

内容的提问来源于stack exchange,提问作者manas021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:45:02