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

Java基于WSDL生成的SOAP客户端如何在请求头添加API密钥

Apache Axis 调用SOAP服务添加API密钥请求头解决方案

报错原因

该报错是因为服务端要求SOAP请求必须在Header中携带合法的API密钥校验信息,当前代码未附加对应头参数,因此被服务端拦截返回错误。

实现步骤

你使用的是Apache Axis 1.x版本的客户端,可通过SoapBindingStub自带的setHeader方法注入自定义请求头,调整后代码如下:

1. 先导入依赖类

import org.apache.axis.message.SOAPHeaderElement;
import javax.xml.namespace.QName;
import java.net.URL;

2. 调整业务调用代码

ServiceImplSynchronization service = new ServiceSynchronizationLocator();
ServiceSynchronization ws = new ServiceSynchronizationSoapBindingStub(new URL(service.getServiceFacturacionSynchronizationPortAddress()), service);

// 以下为新增API密钥头逻辑
// 替换为WSDL中定义的targetNamespace实际值
String serviceNamespace = "http://你的服务实际命名空间地址/";
// 替换为接口要求的API密钥头字段名,若服务要求用Authorization则改为此值
String apiHeaderName = "ApiKey";
// 替换为你申请到的实际API密钥值
String apiToken = "你的实际API_KEY";

// 构造SOAP头对象
SOAPHeaderElement apiKeyHeader = new SOAPHeaderElement(new QName(serviceNamespace, apiHeaderName), apiToken);
// 注入头到请求中
((ServiceSynchronizationSoapBindingStub) ws).setHeader(apiKeyHeader);

// 执行业务请求
ws.verifyCommunication();

调试排查方案

如果调整后仍报错,可开启Axis调试日志查看完整SOAP请求报文,确认头是否正确注入:

// 启动时添加以下系统配置开启请求日志
System.setProperty("axis.transport.logLevel", "debug");

你可以对比打印出的SOAP报文Header部分,确认和接口文档要求的格式是否一致。


内容的提问来源于stack exchange,提问作者Freddy Aguilar Rojas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:15:03