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

2023-11-07

目录

前言

一、需要用到的maven

二、如何调用webservice接口

调用方法一:

调用方法二:

myEclipse生成的例子:

idea生成的例子:


前言

平常我们开发调用接口一般会用到几种数据格式,比如有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>

有很多留言或者私信我的朋友们,都咨询用到的import 和dependence

我就贴在下面了

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Encoder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

//-----主要下面这些-------
import javax.xml.namespace.QName;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
 <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>


        <!-- WebSocket -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <!--websocket作为客户端-->
        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.3.5</version>
        </dependency>

 <!--webservice-->
        <dependency>
            <groupId>com.tetragramato</groupId>
            <artifactId>custom-spring-boot-resttemplate</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.2.5</version>
        </dependency>

        <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>

 


参考文章 

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • DVWA靶场之XSS通关详解

    原理 XSS漏洞是攻击者将恶意代码注入到合法网页中 当用户浏览该页面时 恶意代码会被执行 从而获取用户敏感信息或进行其他攻击 形成原因 网站对用户输入数据的过滤不严格或不完备 攻击者可以根据这个漏洞向网站提交恶意代码 然后再将这些代码传播给
  • ubuntu18断电后recovering journal一直卡在开机界面

    事故机器 elitebook735 系统 ubuntu18 内核 4 20 发生原因 没电关机了 还是保持电量充足比较好 开机的时候回显示 xxx recovering journal dev 磁盘 clean xxxxx 修复方法 关闭电
  • 读书清单

    作者 犹寒 链接 https www zhihu com question 51265095 answer 129906474 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 本文作者姬十三 文章著作权归原作
  • js 浮动窗效果

    源代码
  • md模板练习

    文本样式 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体 210 运算结果是 1024 列表 项目 项目 项目 项目1 项目2 项目3 计划任务 完成任务 链接 链接 link 图片 带尺寸的图片
  • offer审批被刷的可能性_字节跳动音视频面试一面挂!!!复习半月再战,转拿腾讯offer!...

    缘起 字节跳动的音视频面准备了半个月的样子 当时投了很多厂 但是主要目标还是进字节 但是万万没想到 居然一面就没了下文 一开始觉得起码能撑到个二面 三面 所以有些措不及防 在期间 也陆陆续续收到了其他公司的几个offer 但是都是些小公司
  • 通过JAVA代码对yaml文件进行增加、修改的操作

    近期有个需求 需要通过java代码对yaml文件进行修改或新增 对pom xml文件进行添加依赖或者删除依赖 首先介绍对yaml文件的操作 1 需要引入jar包
  • Java Remote Debug

    Java Remote Debug 简介 如果是本地调试 那么在IDE工具 比如Eclipse 的帮助下 是非常容易的 但是如果想对部署在测试 生产环境中的程序进行调试时 你会怎么办呢 在这种情况下 源码已经被编译为中间代码 因此本地调试肯
  • windeployqt.exe的使用与避坑(windows平台)

    1 介绍 windeployqt exe是Qt自带的工具 用于创建应用程序发布包 简单来说 这个工具可以自动地将某程序依赖的库 资源拷贝到其所在目录 防止程序在其他电脑上运行报找不到库的错误 这里贴上官方文档 https doc qt io
  • 零死角玩转stm32-高级篇之FatFs

    零死角玩转stm32 高级篇之FatFs Rev R0 09 2013年08月05日 教程 评论数 1 被围观 1 579 2 FatFs Rev R0 09 2 1 实验描述及工程文件清单 实验描述 MicroSD卡文件系统 FATFS
  • 前端精度丢失处理

    前端操作数据时 如果数据超出一定范围会出现精度丢失的问题 这是因为 在传输过程中 数据类型被转换成Number Number的精度范围在2 53之间 即 9007199254740991 9007199254740991 超出范围就会造成精
  • visual studio code搭建Java环境 - 一步一个脚印详细教程

    visual studio code搭建Java环境 一 软件安装 二 添加环境变量 三 vscode配置 1 软件本身设置 2 编译环境配置 后记 一 软件安装 visual studio code下载链接 https azure mic
  • java 根据 SVN changeLog 文件 生成增量升级包

    近日在做项目的时候 遇到了个问题 因为本地环境与生产环境 不一致 所以修改之后的代码不能整体打包 放到生产环境 而是只能以增量包的形式升级 手动打包 费时费力 而且容易出错 于是参照网上一些博客开发了一个增量包打包工具 好闲言少叙 上代码
  • 面试了这么多场,“ 进程间的通信 ” 真是从不缺席,小伙伴们赶快重视起来!!

    进程间通信 1 管道 2 消息队列 3 共享内存 4 信号量 5 信号 6 Socket 套接字 每个进程的用户地址空间都是独立的 一般而言是不能互相访问的 但内核空间是每个进程都共享的 所以进程之间要通信必须通过内核 在内核中开辟一块缓冲
  • logback日志配置实例

    在pom xml文件中引入依赖
  • 数据分析学习总结笔记07:方差分析

    数据分析学习总结笔记07 方差分析 1 方差分析概述 1 1 方差分析简介 1 2 方差分析基本思想和原理 1 3 方差分析的基本假设 2 单因素方差分析 One way ANOVA 2 1 单因素方差分析概念 2 2 单因素方差分析的原理
  • 西门子PLC的S7协议报文解析说明

    我们以S7的1500系列来查看握手和读取 写入 字Word或者位Bit 命令报文 以下报文不做说明时都是十六进制字节 西门子PLC需要连接成功后发送两次握手命令方可进行读写通信 西门子PLC的S7协议的头由四个字节组成 第一个字节数固定为0
  • C#实现全盘扫描,找到符合要求的文件,并把路径写入到TXT中

    好久没更新文章了 来水一篇 最近领导安排了个任务 让把服务器上符合要求的文件的路径找出来 windos自带的搜索功能太慢了 everything不想下载 想着自己实现一个 实现完成发现速度也不是很慢 实现思路 1 先把电脑中的所有驱动器名称
  • 【Linux】socket 编程基础

    文章目录 网络间的通信 socket 是什么 1 socket 套接字 2 套接字描述符 3 基本的 socket 接口函数 3 1 头文件 3 2 socket 函数 3 3 bind 函数 struct sockaddr 主机序列与网络
  • [亲测可用]springBoot调用对方webService接口的几种方法示例

    目录 前言 一 需要用到的maven 二 如何调用webservice接口 调用方法一 调用方法二 myEclipse生成的例子 idea生成的例子 前言 平常我们开发调用接口一般会用到几种数据格式 比如有restful的 这个是目前最流行