Java调用WebService,HttpBasicAuth鉴权,wsimport,cxf通通走开

调用webservice接口有好多种方式,比如wsimport生成呀,CXF,JAX-WS,尝试过以后都是各种步骤,各种注意,特别加上鉴权方式不同,搞的复杂N倍,还难排查问题,如果你用到其中某种方式也遇到了其中的问题,那我们来用最原始的HttpURLConnection方式吧,包你满意,哪里有问题一眼就看到了。废话不多说,开始!

一、准备好SOAP请求体,你测试肯定会有SOAPUI这个工具吧,只要你导入wsdl,上面就有哦

二、代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;

public class BasicAuthSoapClient {
    public static void main(String[] args) throws Exception {
        String username = "yourname";
        String password = "yourpwd";
        String wsdlUrl = "xxxxxx?wsdl";

        // 编码用户名和密码
        String auth = Base64.getEncoder().encodeToString((username + ":" + password).getBytes());

        // 创建URL对象
        URL url = new URL(wsdlUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // 设置请求方法
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);

        // 设置基本身份验证头
        conn.setRequestProperty("Authorization", "Basic " + auth);

        // 设置其他必要的请求头,如Content-Type等
        conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
        conn.setRequestProperty("SOAPAction", ""); ##这是啥呢,这就是你wsdl的namespaceURI和localPart组合哦。就是QName的两个参数啦,举个例子http://xxx.ws.itl.com/,xxxService
        conn.setDoOutput(true); ## 你的请求体啦~~~
        String soapRequest="";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = soapRequest.getBytes("utf-8");
            os.write(input, 0, input.length);
        }
        // 发送请求并获取响应
        int responseCode = conn.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        StringBuffer response = new StringBuffer();
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // 打印响应内容
        System.out.println(response);
    }
}

三、请求一下哦,简单又明了。也不难排查。简直完美~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值