解析WSDL调用WebService服务

本文介绍了如何使用Hutool的SoapClient工具高效地处理复杂WSDL文档,包括单层和多层接口调用示例,以及如何处理嵌套方法和参数。通过实例演示了如何导入依赖、构造请求并解析响应数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     工作中需要调用python,c++等外来接口,其提供的方式为WSDL文档,WebService接口占有着很大份额,在最初我们以引入类似Axis等库来实现接口请求。需要引入多个依赖,这种方法过于麻烦。这里采用hutool提供的SoapClient来进行实现

一.单层情况

1.通过对wsdl地址进行访问,我们可以获取到wsdl文档的内容,可以确定调用的方法名与参数。

2.wsdl的xml文档内容较为复杂,当出现多层的情况下容易找不到内层的方法。最好通过soapUI工具先对地址进行解析,然后尝试调用请求。如下为两个参数,只有一层。

  1. 方法体为:body
  2. 参数有2个,为:urn:STARTDATE,urn:ENDDATE
  3. 定义了一个命名空间,前缀为web,URI为urn:DefaultNamespace

3.导入pom依赖 

<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>5.4.7</version>
</dependency>

 采用java完成对接口的调用。

 public static void temp(){
        //传入的参数(命名空间与参数名称)  
        QName STARTDATE = new QName("urn:DefaultNamespace", "STARTDATE");
        QName ENDDATE = new QName("urn:DefaultNamespace", "ENDDATE");
        SoapClient client = SoapClient.create("wsdl的地址");

        //传入参数的值
        SOAPBodyElement body = client.setMethod(STARTDATE).getMethodEle();
        body.setValue("2021-09-10 01:00:00");

        SOAPBodyElement body2 = client.setMethod(ENDDATE).getMethodEle();
        body2.setValue("2021-09-10 01:10:00");

        //请求与调用ReUtil进行解析
        String xml = client.send(true);
        String data = ReUtil.get("\\{.*\\}", xml, 0);
        System.out.println(data);
    }

二.有子层的情况

方法属性被外侧套用,先获取外层再设置值

public static  void temp2() throws SOAPException {

       //调用的方法
        QName STARTDATE = new QName("urn:DefaultNamespace", "GETCUSTOMERQUESTION");
        SoapClient client = SoapClient.create("wsdl的地址");
        //获取内层的方法STRPARAMS,然后对其进行设置值,为Json格式
        SOAPElement s1 = 
        client.setMethod(STARTDATE).getMethodEle().addChildElement("STRPARAMS");
        HashMap<String, String> map = new HashMap<>();
        map.put("lastSubmitTimeStart","2021-09-10 01:00:00");
        map.put("lastSubmitTimeEnd","2021-09-11 01:10:00");
        String s = JSONUtil.toJsonStr(map);
        s1.setValue(s);

        String xml = client.send(true);
        String data = ReUtil.get("\\{.*\\}", xml, 0);
        System.out.println(data);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值