SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

SpringBoot调webservice接口,一般都会给你url如:
http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl
http://10.103.6.158:35555/check_ticket/Ticket_Check.asmx
其中.asmx是.net开发提供的webservice服务。

依赖

引入相关依赖:

<!-- webService-->
 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web-services</artifactId>
  </dependency>

  <!-- CXF webservice -->
  <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
      <version>3.2.1</version>
  </dependency>
  <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>3.2.1</version>
  </dependency>

浏览webService提供的方法,确定入参顺序 直接在浏览器里面访问url,如下

用SoapUI工具

用些是.asmx格式,也可以直接在浏览器访问。会列出方法列表

代码

创建client:

package com.gqzdev.sctads.configuration;

import com.gqzdev.sctads.constant.CommonConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author gqzdev
 * @date 2021/08/26 15:53
 **/
@Configuration
@Slf4j
public class JaxWsClientConfig {

    @Bean("JaxWsClient")
    public Client client() {
        // 创建动态客户端
        JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
		//CommonConstant.PUBLIC_SECURITY_URL为连接的url,如http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl
        log.info("publicsecurity webService url : {}", CommonConstant.PUBLIC_SECURITY_URL);
        //创建client
        Client client = clientFactory.createClient(CommonConstant.PUBLIC_SECURITY_URL);
        HTTPConduit conduit = (HTTPConduit) client.getConduit();
        HTTPClientPolicy policy = new HTTPClientPolicy();
        policy.setAllowChunking(false);
        // 连接服务器超时时间 10秒
        policy.setConnectionTimeout(10000);
        // 等待服务器响应超时时间 20秒
        policy.setReceiveTimeout(20000);
        conduit.setClient(policy);
        return client;
    }
}

有了client,便可以直接注入调用invoke。找到自己需要调用的方法:
下面只展示一个方法的调用演示,其他的类似

package com.gqzdev.sctads.service.impl;

import com.gqzdev.sctads.constant.CommonConstant;
import com.gqzdev.sctads.service.PublicSecurityService;
import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.endpoint.Client;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import javax.xml.namespace.QName;

/**
 * @author gqzdev
 * @date 2021/08/26 15:24
 **/
@Slf4j
@Component
public class PublicSecurityServiceImpl implements PublicSecurityService {

    @Autowired
    @Qualifier("JaxWsClient")
    private Client client;

    /**
     * 旅客登记
     */
    @Override
//    @Async
    public String chineseAddNew(Object... params) {
//        QName qname = new QName("service.", CommonConstant.CHINESE_ADD);
        try {
            Object[] invoke = client.invoke(CommonConstant.CHINESE_ADD, params);
            if (invoke != null && invoke.length >= 1) {
                String result = (String) invoke[0];
                log.info("userAddNew result: {}", result);
                return result;
            }

        } catch (Exception e) {
//            e.printStackTrace();
            log.error("invoke WS userAddNew method error: {}", e.getMessage());
        }
        return null;
    }
}

使用post请求访问webservice接口

package com.gqzdev.sctads.service.impl;

import cn.hutool.core.util.XmlUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * 对接票务系统验证
 *
 * @author gqzdev
 * @date 2021/08/25 17:07
 **/
@Component
@Slf4j
public class TicketCheckServiceImpl implements TicketCheckService {

    @Autowired
    @Qualifier("nativeRestTemplate")
    private RestTemplate restTemplate;

    @Override
    public boolean ticketCheck(TicketRequestVO ticketRequestVO) {

        //构造请求参数xml
        Map objMap = JSONObject.toJavaObject(JSONObject.parseObject(JSON.toJSONString(ticketRequestVO)), Map.class);
        String objXml = XmlUtil.mapToXmlStr(objMap);
        String requestXml = objXml.replace("<xml>", "<MQ_MESSAGE>").replace("</xml>", "</MQ_MESSAGE>");
        log.info("ticket request params xml: {}", requestXml);

        /**
         * 调用webservice请求
         */
        HttpHeaders headers = new HttpHeaders();
        //header参数
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //请求参数
        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        //接口参数
        map.add("msg", requestXml);
        //构造实体对象
        HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);
        //发送post请求webservice
        String response = restTemplate.postForObject(CommonConstant.TICKET_REQUEST_URL, param, String.class);
        log.info("ticket request response: {}", response);

        /**
         * 解析返回xml,返回是否认证成功
         */
        String responseXml = XmlUtil.unescape(response);
        Map<String, Object> resultMap = XmlUtil.xmlToMap(responseXml);
        TicketResponseVO ticketResponseVO = JsonUtil.map2pojo(resultMap, TicketResponseVO.class);
        //0开闸 ,1不开闸
        if (ticketResponseVO.getMQ_MESSAGE().getMSG_BODY().getCOMMAND() == 0) {
            return true;
        }
        return false;
    }

}

XML相关操作

关于xml解析处理,这边推荐使用hutool里面的XmlUtil

到此这篇关于SpringBoot调用第三方WebService接口(.wsdl与.asmx类型 )的文章就介绍到这了,更多相关SpringBoot WebService接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot使用CXF集成WebService的方法

    1.写在前面 WebService 对我来说既熟悉又陌生,已经将近六七年没有看到过他了, 具体的介绍我就不多少了, 想了解的百度百科下说的很详细. 之所以突然研究WebService是接到一个需求要去给 XX 项目做一个适配层,他们原有系统是使用webservice做的,所以-- 那我们就来看看,这一个古老的技术如何和如今最流行的框架SpringBoot进行结合. 2.SpringBoot 集成WebService 2.1 导入依赖 compile('org.springframework.bo

  • springboot整合cxf发布webservice以及调用的方法

    webservice性能不高,但是现在好多公司还是在用,恰好今天在开发的时候对接项目组需要使用到webservice下面来说下简单的案例应用 首先老规矩:引入jar包 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version> &

  • SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

    SpringBoot调webservice接口,一般都会给你url如: http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl http://10.103.6.158:35555/check_ticket/Ticket_Check.asmx 其中.asmx是.net开发提供的webservice服务. 依赖 引入相关依赖: <!-- webService--> <dependency> <gr

  • Java调用第三方http接口的常用方式总结

    目录 1.概述 在Java项目中调用第三方接口的常用方式有 2.Java调用第三方http接口的方式 2.1 通过JDK网络类Java.net.HttpURLConnection 2.2 通过apache common封装好的HttpClient 2.3 通过Apache封装好的CloseableHttpClient 2.4 通过OkHttp 2.5 通过Spring的RestTemplate 2.6通过hutool的HttpUtil 3.总结 1.概述 在实际开发过程中,我们经常需要调用对方提

  • Java调用CXF WebService接口的两种方式实例

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 1.静态调用 // 创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 判断是否抛出异常 factory.getOutInterceptors().add(new LoggingInInterceptor()); // 注册webservic

  • 使用Feign调用第三方http接口

    目录 Feign调用第三方http接口 下面就来演示一下 原生Feign调用第三方接口 引入依赖 写接口 使用 深入理解 Feign调用第三方http接口 我们平常在开发的时候,经常会碰到调用第三方的接口,这个时候我们可以使用httpClient或者restTemplate,但是这两种方式相比较与Feign调用,都会麻烦一点儿. Feign是声明式服务调用客户端,既规范又简洁,帮我们屏蔽了http调用的复杂性,而且完美切入springcloud技术体系. 下面就来演示一下 使用Feign来调用第

  • C#调用第三方工具完成FTP操作

    一.FileZilla Filezilla分为client和server.其中FileZilla Server是Windows平台下一个小巧的第三方FTP服务器软件,系统资源也占用非常小,可以让你快速简单的建立自己的FTP服务器. 打开FileZilla,进行如下操作 下图红色区域就是linux系统的文件目录,可以直接把windows下的文件直接拖拽进去. 二.WinSCP 跟FileZilla一样,也是一款十分方便的文件传输工具.WinSCP是连接Windows和Linux的. WinSCP

  • 实例详解Java调用第三方接口方法

    目录 一. 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 2.HttpClientUtil工具类 3.第三方api接口 4.测试类 二.通过Apache common封装好的HttpClient 1.引入依赖 2.httpClientUtil 3.第三方api接口 4.测试类 三.通过Spring的RestTemplate 1.引入依赖 2.RestTemplate配置类 3.RestTemplate实现类

  • springboot调用支付宝第三方接口(沙箱环境)

    springboot+调用支付宝第三方接口(沙箱环境) 大神勿喷!! 网址:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,应用私钥.应用私钥自

  • SpringBoot项目使用 axis 调用webservice接口的实践记录

    目录 序 WebService 定义 个人理解 实践 webservice 常识 一个webservice 接口发布地址往往类似: qq在线接口验证接口为例 maven 使用 axis 应用依赖(不可缺失必须) 代码(粘贴可用) 序 实际工作场景中会存在对接去很多系统的数据的任务,数据对接呢 方式很多吧,接触过 : http| https请求 数据库视图 数据库存储过程 soap+xml工单... 然后这两天接到一个关于webservice 数据接口的方式对接,说实话对于这个一脸懵逼,完全不知道

  • php中创建和调用webservice接口示例

    作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice.简单说, WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的结果以XML形式返回来给你,你的程序就解析这些XML数据,然后显示出来或做其它操作. 写webservice需要了解:基础的 Web

  • C#调用webservice接口的最新方法教程

    前言 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object Access Protocol)简单

随机推荐