专栏首页灵儿的笔记[亲测可用]springBoot调用对方webService接口的几种方法示例

[亲测可用]springBoot调用对方webService接口的几种方法示例

前言

平常我们开发调用接口一般会用到几种数据格式,比如有restful的,这个是目前最流行的,也是最简单开发的,还有一种就是webservice数据格式,这个应该是很久以前的一些项目是用的这种

那什么是webservice呢,Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序

在调用别人写好的webservice服务的时候,对方会给你一串schema文件(xsd文件)或者是wsdl结尾的地址,你访问wsdl地址和xsd文件是一样的,比如下面的xsd格式的例子

当然还有很多其他的xsd例子,点击查看:https://my.oschina.net/CraneHe/blog/183471

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xxx.zygxsq.cn/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="PowerAlarmImplService" targetNamespace="http://xxx.zygxsq.cn/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xxx.zygxsq.cn/" elementFormDefault="unqualified" targetNamespace="http://xxx.zygxsq.cn/" version="1.0">
<xs:element name="queryPowerAlarm" type="tns:queryPowerAlarm"/>
<xs:element name="queryPowerAlarmResponse" type="tns:queryPowerAlarmResponse"/>
<xs:complexType name="queryPowerAlarm">
<xs:sequence>
<xs:element minOccurs="0" name="alarmId" type="xs:string"/>
<xs:element minOccurs="0" name="eventTime" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="queryPowerAlarmResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:powerAlarmRsp"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="powerAlarmRsp">
<xs:complexContent>
<xs:extension base="tns:baseRsp">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="responseList" nillable="true" type="tns:powerAlarm"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="baseRsp">
<xs:sequence>
<xs:element minOccurs="0" name="errorInfo" type="xs:string"/>
<xs:element name="resultCode" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="powerAlarm">
<xs:sequence>
<xs:element minOccurs="0" name="alarmId" type="xs:string"/>
<xs:element minOccurs="0" name="alarmStatus" type="xs:string"/>
<xs:element minOccurs="0" name="canelTime" type="xs:string"/>
<xs:element minOccurs="0" name="eventTime" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="queryPowerAlarmResponse">
<wsdl:part element="tns:queryPowerAlarmResponse" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:message name="queryPowerAlarm">
<wsdl:part element="tns:queryPowerAlarm" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:portType name="IPowerAlarm">
<wsdl:operation name="queryPowerAlarm">
<wsdl:input message="tns:queryPowerAlarm" name="queryPowerAlarm"> </wsdl:input>
<wsdl:output message="tns:queryPowerAlarmResponse" name="queryPowerAlarmResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PowerAlarmImplServiceSoapBinding" type="tns:IPowerAlarm">
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="queryPowerAlarm">
<soap12:operation soapAction="" style="document"/>
<wsdl:input name="queryPowerAlarm">
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output name="queryPowerAlarmResponse">
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PowerAlarmImplService">
<wsdl:port binding="tns:PowerAlarmImplServiceSoapBinding" name="PowerAlarmImplPort">
<soap12:address location="http://11.111.11.111:9556/xxx/ws/powerAlarmWs"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

一、需要用到的maven

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-ws</artifactId>
            <version>1.3.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
        </dependency>

二、如何调用webservice接口

调用方法一:

最简单的就是用这种方法,可以直接调对方的webService接口

/**
* 调用webservice接口
* 原文章链接:https://blog.csdn.net/qq_27471405/article/details/105275657
* 其他均为盗版,公众号:灵儿的笔记(zygxsq)
*/
public String sendWsdl(Object obj) {
        logger.info("--------调用webservice接口begin-------");
        // 创建动态客户端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

        //对方的wsdl地址
        Client client = dcf.createClient("http://xx
.xxx.xx.xx:9556/xxx/ws/getAlarmWs?wsdl");
        String json = null;
        try {

            QName qName = new QName("http://xx.zygxsq.cn/", "getAlarmWs");                                                //*原文章链接:https://blog.csdn.net/qq_27471405/article/details/105275657     * 其他均为盗版,公众号:灵儿的笔记(zygxsq)
            Object[] objects1= client.invoke(qName, "aaa","bbb"); //参数1,参数2,参数3......按顺序放就看可以

            json = JSONObject.toJSONString(objects1[0]);
            System.out.println("返回数据:" + json.toString());

        } catch (Exception e) {
            e.printStackTrace();
            logger.info("服务器断开连接,请稍后再试");
        }
        logger.info("--------调用webservice接口end-------");
        return json;


    }

调用方法二:

得借助开发工具生成代码,比如myEclipse 和 idea 工具

myEclipse 生成的教程可以看下这篇文章:https://www.cnblogs.com/demojie/archive/2017/08/24/java_webservice.html

idea 生成的教程可以看下这篇文章:https://blog.csdn.net/weixin_40699910/article/details/103399292

myEclipse生成的例子:

myEclipse根据xsd文件生成webservice代码教程

1、如果选择本地的wsdl文件,生成后就是这么一堆代码,如图所示

看我截图中显示的一个文件,因为我把wsdl文件是放在D盘目录下, 然后生成的,如果你们是直接用对方url生成的,这里应该就是对方的url地址,当然你也可以跟我一样,放在本地生成,然后改成对方的地址,也是可以的。这个智者见智。

通过myeclipse生成上面的代码之后,不一定就要在myeclipse上面开发,可以copy上面9个这些代码到任何项目地方去,比如idea中,然后就可以通过下面的代码去调用对方

/**
*调用webservice接口
*原文章链接:https://blog.csdn.net/qq_27471405/article/details/105275657
* 其他均为盗版,公众号:灵儿的笔记(zygxsq)
*/
public String sendWsdlWebService(String aaa,String bbb) {
        logger.info("--------调用webservice查询接口begin-------");
        QueryPowerAlarmResponse queryPowerAlarmResponse=null;
        URL url;
        String json="";
        try {

            url = new URL("http://11.111.111.111:9556/xxx/ws/powerAlarmWs?wsdl");
            //Qnameqname是qualified name 的简写
            //2.构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成
            QName qname=new QName("http://xxx.zygxsq.cn/","PowerAlarmImplService");
            javax.xml.ws.Service service= javax.xml.ws.Service.create(url, qname);                                 //*原文章链接:https://blog.csdn.net/qq_27471405/article/details/105275657     * 其他均为盗版,公众号:灵儿的笔记(zygxsq)
            IPowerAlarm port = service.getPort(IPowerAlarm.class);
            PowerAlarmRsp powerAlarmRsp = port.queryPowerAlarm(aaa, bbb);

            json = JSONObject.toJSONString(powerAlarmRsp);
           // System.out.println("111返回数据:" + json.toString());

        }catch (Exception e){
            e.printStackTrace();
        }
        logger.info("--------调用webservice查询接口end-------");
        return json;

    }

idea生成的例子:

当然,idea也是可以生成代码的,只是相对myeclipse的生成比较麻烦,要引入一堆的maven,然后才能生成,

具体完整的可以参考这篇文章:https://blog.csdn.net/weixin_40699910/article/details/103399292

这里我就不写了,我就在这里写一下要注意的一点:要引入的maven,就是下面这一堆,而且生成代码后,要注释掉这些maven,或者去掉这些maven,不然你每编译一次,就会重新生成一份webSocket的代码。

  <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.12.3</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <schemaLanguage>WSDL</schemaLanguage>
          <generatePackage>com.dexcoder.ws</generatePackage>
          <generateDirectory>${basedir}/src/main/java</generateDirectory>
          <schemas>
            <schema>
              <fileset>
                <directory>${basedir}/src/main/resources</directory>
                <includes>
                <include>*.wsdl</include>
              </fileset>
            </schema>
          </schemas>
        </configuration>
      </plugin>
    </plugins>

参考文章

https://www.cnblogs.com/demojie/archive/2017/08/24/java_webservice.html

https://blog.csdn.net/weixin_40699910/article/details/103399292

感谢原作者的分享,让技术人能够更快的解决问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java调用webservice接口的几种方法

    三哥
  • PHP调用微博接口实现微博登录的方法示例

    在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户...

    砸漏
  • PHP调用微博接口实现微博登录的方法示例

    在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户...

    子润先生
  • Java小白翻身 - webservice教程3

    如果你用的是jdk1.8,请在lib目录(我的是在C:\jdk\lib)新建一个jaxp.properties,里面写上一句话

    剽悍一小兔
  • 【SpingBoot guides系列翻译】调用RESTfulWebService

    这节将演示如何在SpringBoot里面调用RESTful的WebService。

    _淡定_
  • SpringCloud开发框架入门知识

    业务中心:在进行一些庞大的项目设计过程之中,应该有更加完善的业务处理,这样所有的客户端(服务器),用这些业务中心的操作就可以完成具体的功能。

    用户2781897
  • Springboot集成Web service接口服务

      1)、XML+XSD:WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及...

    别先生
  • webService简单入门实战(一)

    首先谈论一下webService这个专栏的诞生吧!最近由于工作方面的原因,慢慢自己工作时间非常的“充沛”,整体为业务而忙,技能的提升方面脚步也略慢一些。由于前同...

    沁溪源
  • 面试题-web service接口如何测试?

    接口相关的测试,http 协议的接口大家平常基础的很多,基本上问题不大。webservice 接口如何测试呢?需先了解什么是 webservice 接口,和 h...

    上海-悠悠
  • 基于Springboot整合RestTemplate调用Webservice接口

    1、基于Springboot整合RestTemplate调用Webservice接口,如果感觉使用webservice客户端调用服务器端不会,或者不方便 的时候...

    别先生
  • 如何开发并发布REST风格的WebService

    ZONGLYN
  • WebService与RMI(远程调用方式实现系统间通信)

      本文是《分布式java应用基础与实践》读书笔记;另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容:

    青石路
  • WebService入门学习一

    参考:https://blog.csdn.net/c99463904/article/details/76018436

    别先生
  • WebService获取数据实例及WSDL文件解读

    这是一个汇总webservice的网站:http://www.webxml.com.cn 里面有非常多可以供调用的WebService

    ZONGLYN
  • day46_Webservice学习笔记_02

    开发步骤:   第一步:导入jar包   第二步:创建SEI接口,要在接口上加入注解:@WebService

    黑泽君
  • 对Jquery+JSON+WebService的一点认识

    Jquery作为一款优秀的JS框架,简单易用的特性就不必说了。在实际的开发过程中,使用JQ的AJAX函数调用WebService

    跟着阿笨一起玩NET
  • WebService就是这么简单

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧…. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那...

    Java3y
  • 新梦想干货——Python测试webservice接口入门基础

    测试webservice接口的方法有很多种(比如通过SoapUI就不错),但是习惯用Python做测试的朋友,可能下面相对而言会更受欢迎。

    新梦想IT职业教育
  • day45_Webservice学习笔记_01

    Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。

    黑泽君

扫码关注云+社区

领取腾讯云代金券