Jax 呼叫 WebService 新增 HTTP Header
阿新 • • 發佈:2021-01-19
場景
要被呼叫的 WebService 需要被新增一些特定的 HTTP header(注意不是 SOAP 的 XML 體中的 HEAD)用於服務的做鑑權處理使用。因為 WebService 呼叫也是一種特殊的的 HTTP 呼叫(HTTP XML 格式的 RequestBody 符合 SOAP 規範的 HTTP POST 請求),自然也可以要求新增 HTTP Header。
示例
本文針對使用 Jax 呼叫 WebService 如何新增 Http Header 給出示例程式碼,如下:
/** * WebService 呼叫示例 * * @author shanhy * @date 2020/11/19 21:06 */ @Service @Slf4j public class DemoInvokeWebService { public String invokeService1(){ String address = "http://localhost:8081/muses-gateway/wsdl/example/services/ws/demoWsApi?wsdl"; // 代理工廠 JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); // 設定代理地址 jaxWsProxyFactoryBean.setAddress(address); // 設定介面型別 jaxWsProxyFactoryBean.setServiceClass(DemoWebService.class); // 建立一個代理介面實現 DemoWebService us = (DemoWebService) jaxWsProxyFactoryBean.create(); // 從服務介面的代理物件獲取底層client物件 Client proxy = ClientProxy.getClient(us); // 建立 HTTP headers Map<String, List<String>> headers = new HashMap<>(); headers.put("MY-SERVICE-NAME", Collections.singletonList("MySampleService")); headers.put("MY-APP-NAME", Collections.singletonList("MySampleServiceApp")); // 新增 HTTP headers 到 webservice 請求中 proxy.getRequestContext().put(Message.PROTOCOL_HEADERS, headers); // 資料準備 String name = "SHANHY"; // 呼叫代理介面的方法呼叫並返回結果 String result = us.hello(name); log.info("webservice返回結果:" + result); return result; } }
public interface DemoWebService {
String hello(String name);
}
(END)