自动生成的webservice客户端设置请求消息头信息

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