用工具加WebSevice链接生成的Client
MaterialRequisitionControllerService service=new MaterialRequisitionControllerService();MaterialRequisition materialRequisitionPort = service.getMaterialRequisitionPort();//添加HTTP消息头Map<String, List<String>> requestHeaders = new HashMap<>();requestHeaders.put("Company-Id", Collections.singletonList("902"));BindingProvider bindingProvider = (BindingProvider)materialRequisitionPort;bindingProvider.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders);
动态调用方式
方法1:RequestContext添加HTTP标头
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient("http://localhost/webservice/material?wsdl");@SuppressWarnings("unchecked")Map<String, List<String>> headers =(Map<String, List<String>>)client.getRequestContext().get(Message.PROTOCOL_HEADERS);if (headers == null) {headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);client.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);}headers.put("Company-Id", Collections.singletonList("902"));Object[] ojs = client.invoke("updateStatus", "233483333", 2);
方法2:自定义拦截器添加HTTP标头
自定义拦截器:
import org.apache.cxf.interceptor.Fault;import org.apache.cxf.message.Message;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import java.util.*;public class CompanyInterceptor extends AbstractPhaseInterceptor<Message> {private static final String COMPANY_ID = "902";public CompanyInterceptor() {//准备请求时进行拦截super(Phase.PREPARE_SEND);}@Overridepublic void handleMessage(Message message) throws Fault {Map<String, List<String>> headers = new HashMap<>(1);headers.put("Company-Id", Collections.singletonList(COMPANY_ID));message.put(Message.PROTOCOL_HEADERS, headers);}}
调用:
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient("http://localhost/webservice/material?wsdl");client.getOutInterceptors().add(new CompanyInterceptor());Object[] ojs = client.invoke("updateStatus", "233483333", 2);
