这里讲的头消息是指发送webservice请求的HTTP头信息(MIME 头信息),而不是SOAP报文里面的Header标签内容。
package example;import mypackage.GetOperInfoRequest;
import mypackage.GetOperInfoResponse;
import mypackage.Webservice11;
import mypackage.WebservicePortType;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class HelloWorldClient {public static void main(String[] args) {// 自动生成的客户端,新增请求消息自定义头//Add HTTP request Headers// 此处value类型必须为List,因为下方HTTP request headers定义的类型是java.util.Map<java.lang.String, java.util.List<java.lang.String>>Map<String, List> requestHeaders = new HashMap<>();requestHeaders.put("sender", Collections.singletonList("SYS028"));requestHeaders.put("receiver", Collections.singletonList("SYS001"));// 创建自动生成的webservice实例Webservice11 service = new Webservice11();WebservicePortType port11 = service.getWebservicePort11();((BindingProvider) port11).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders);// 创建生成的请求实体实例GetOperInfoRequest req = new GetOperInfoRequest();req.setRequest("<Request>"+ "<starttime>2023-07-04 00:00:00</starttime>"+ "<endtime>2023-07-06 00:00:00</endtime>"+ "</Request>");// 调用方法GetOperInfoResponse res = port11.getOperInfo(req);System.out.println(res.getResponse());}}
这里需要注意的是头消息(requestHeaders)泛型必须是<String, List>,否则运行会报错,原因如图:
有关webservice的知识还在摸索中,如有理解不对的地方欢迎指出。