Axis 1.4 框架SOAP调用时添加 Http 请求头

因业务需要,接手某个项目需要接外部一个很旧的系统,必须使用 Axis 1.4 进行Web Service调用。为什么要用Axis 框架?因为手中项目采用的是 Spring Boot 框架以及外部系统的不可描述的原因,使用 Spring 框架自带的WebService 客户端调用对方接口会出现各种问题。费了老大劲,总算解决了 Axis 和 Spring Boot 的兼容问题,接口可以调通。

项目上线后一段时间,外部接口进行了调整,要求在调用 Web Service 时在 Http 请求上增加请求头。于是百度和Google并用,并没有找到相关资料。

对于 Web Service 接口调用,通常参数是加到SOAP信封内的,这种在SOAP请求的Http请求头上传参的操作闻所未闻,不知道对端方案怎么评审通过的。

Axis 1.4 框架最后一次更新还是在 2006 年,那时候楼主还在念高中,鬼知道这个框架是内部怎么处理的,于是翻阅源码,总算找到以下一段:

根据上下文,增加以下代码,完事:

final Call call = (Call) new Service().createCall();
//设置接口URL,命名空间,参数名等
call.setTargetEndpointAddress(new URL(servicesURL));
call.setOperationName(new QName(namespace, localpart));
call.addParameter(paramName, org.apache.axis.Constants.XSD_STRING,    javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
call.setEncodingStyle("UTF-8");

//设置 HttpClient 请求头
final Hashtable headers = new Hashtable<>();
headers.put(key, value);
call.setProperty(HTTPConstants.REQUEST_HEADERS, headers);

//调用远程接口
final Object response = call.invoke(new Object[] { reqValue });