这里讲的头消息是指发送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的知识还在摸索中,如有理解不对的地方欢迎指出。