解析WSDL调用WebService服务

     工作中需要调用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);
    }

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web服务描述语言(WSDL)是一种XML文件,它用于描述Web服务,包括它能做什么,以及如何访问它们。在一个Web服务被提供之前,Web服务必需描述他们的用途和设计原则。这是为了更容易为Web服务消费者配置他们的应用程序以正确使用Web服务。 使用WSDL调用Web服务,需要首先获取到Web服务WSDL文件。WSDL文件通常由Web服务提供程序生成,并且可以从Web服务的URL地址下载。此后,可以使用WSDL工具来解析WSDL文件,并声明Web服务的各个方法和参数。使用WSDL工具,可以创建客户端代码,以便Web服务的消费方可以直接调用Web服务WSDL文件使用一种称为SOAP(简单对象访问协议)的协议来访问Web服务。SOAP被设计为允许应用程序通过互联网进行通信,并在此过程中保持信息的机密性和完整性。SOAP消息被包装在XML中,并使用HTTP或HTTPS传输。 当客户端需要调用Web服务时,它会使用WSDL文件生成的客户端代码来创建SOAP消息。该消息包含Web服务的方法和参数,然后将其发送到Web服务的URL。Web服务返回一个SOAP消息,其中包含Web服务的响应。客户端代码可以解析此响应,以便提取Web服务返回的结果。 总之,WSDL调用是Web服务的一种调用方式,通过WSDL文件获取Web服务的描述信息,使用WSDL工具生成客户端代码来调用Web服务WSDL调用使用SOAP协议通信,将客户端请求包装成XML消息,发送到Web服务的URL,然后Web服务返回包含响应的XML消息,以便客户端解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值