1. 程式人生 > 其它 >Jax 呼叫 WebService 新增 HTTP Header

Jax 呼叫 WebService 新增 HTTP Header

場景

要被呼叫的 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)