0


用Restful方式调用WebService接口(需认证)

准备工作

一个可以调用的WebService接口

调用WebService接口的SoapUI工具

调用Rest接口的Postman/Apipost工具

第一步:解析wsdl

首先接口在浏览器里访问是这样的,一个需要认证的接口

打开SoapUI工具,new一个Project,自定义一下名称和粘贴你的wsdl地址

解析wsdl的时候弹出提示输入账号密码,跟浏览器那边一样,要先认证才能看到wsdl配置

解析完成后,左边的列表树会发现2个接口方法

第二步:用SoapUI调用接口

打开其中一个, 按照接口要求传值调用,我这是调用成功并获取返回值的截图

注:如果是需要认证的接口,要再次配置认证账号和密码,在这里配置,左下角的“Auth”

第三步:用Apipost调用接口

用postman也可以,只不过我们要支持国产,宣传国产。而且Apipost做得也很好,大家也可以试试。

把SoapUI解析出来的接口地址和传参格式复制出来备用

打开Apipost,把接口地址和传参放进去,选择POST方式,raw传参,格式是xml

注:如果是认证接口,在认证这里配置。这里的认证就是Header里的Authorization(key),value是Basic [你的账号密码Base64编码后的字符串]

调用结果和SoapUI一样,说明调用成功了

第四步:用Java代码调用接口

最终都是合并到项目代码里来的,这里调用代码没用httpConnect和httpClient,我用的是国产jar包工具类HuTool,非常方便好用,而且有官网,有API文档,大家可以试试。

直接贴代码了,一眼会。

package 你的包名;

import cn.hutool.http.HttpRequest;

public class RestTest {

    public static void main(String args[]) {
        String url = "你要调用的WebService接口地址";
        String xml = "你要传的request请求参数";

        String data = HttpRequest.post(url)
                .header("Content-Type", "text/xml")
                .header("Authorization", "Basic {你的认证账号密码}")
                .header("time", "3600")
                .body(xml)
                .execute().body();

        System.out.println(data);
    }

}

完结,撒花!

本来不管是用Axis还是用XFire框架去整合调用都会显得很麻烦,要整合相关类库到项目中需要付出的时间成本,或者使用【generate java code from wsdl(Axis)】功能生成的大量客户端代码,会显得很臃肿,切换接口地址的时候更是头疼。而用这种“另辟蹊径”的方法,会节省很多时间和代码量,很轻松就能达成目标了。

一些未解决的问题

另外问下,用IDEA的generate java code from wsdl无法生成带认证的wsdl,会提示“wsdl url is not valid”。而在浏览器访问后再手动保存wsdl文件,再用这个功能勾选用离线文件生成,调用的时候用Bingdingstub类去调用,已经用.setUsername和.setPassword设置账号密码了,但调用还是不行,这个你们有啥解决方案不?

调用的代码

package 你的包名;

import java.net.URL;

public class MainTest {

    public static void main(String args[]) {
        try {
            PartnerRequest partnerRequest = new PartnerRequest();
            partnerRequest.setACCOUNT_GROUP("Z005");
            partnerRequest.setBP_CLASS("1");
            partnerRequest.setCOMPANY("2600");
            partnerRequest.setHAS_CREDIT_CODE("1");
            GetPartner getPartner = new GetPartner(partnerRequest);

            String url = "你要调用的WebService接口地址";
            SI_CUSSUPPLIER_ACCESS_RCVBindingStub stub = new SI_CUSSUPPLIER_ACCESS_RCVBindingStub(new URL(url), new SI_CUSSUPPLIER_ACCESS_RCVServiceLocator());
            stub.setUsername("认证的账号");
            stub.setPassword("认证的密码");

            // 不需要认证的话只要用service对象就可以调用了
            SI_CUSSUPPLIER_ACCESS_RCVServiceLocator locator = new SI_CUSSUPPLIER_ACCESS_RCVServiceLocator();
            SI_CUSSUPPLIER_ACCESS_RCV service = locator.getHTTPS_Port();

//            GetPartnerResponse response = service.cusSupplier_Query(getPartner);// 不需要认证的话只要用service对象就可以调用了
            GetPartnerResponse response = stub.cusSupplier_Query(getPartner);// 到这步就报错了

            MdmPARTNER mdmPARTNER = response.get_return();
            System.out.println(mdmPARTNER.getIS_EXIST());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
标签: restful postman 后端

本文转载自: https://blog.csdn.net/Nami_sup/article/details/129672342
版权归原作者 吃兔纸不吐毛 所有, 如有侵权,请联系我们删除。

“用Restful方式调用WebService接口(需认证)”的评论:

还没有评论