Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WebService系列之HttpClient调用WebService接口

WebService系列之HttpClient调用WebService接口

作者头像
SmileNicky
发布于 2021-03-17 08:06:47
发布于 2021-03-17 08:06:47
4.8K00
代码可运行
举报
文章被收录于专栏:Nicky's blogNicky's blog
运行总次数:0
代码可运行

测试工具下载soapui测试

http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.extra.credit.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.util.List;

/**
 * <pre>
 *      工具类:HttpClient方式调用webService服务
 * </pre>
 *
 * <pre>
 * @author nicky ma
 * 修改记录
 *    修改后版本:     修改人:  修改日期: 2021/03/11 10:05  修改内容:
 * </pre>
 */
@Component
public class WSHttpClientUils {

    static Logger log = LoggerFactory.getLogger(WSHttpClientUils.class);

    /**
     *  HttpClient方式调用webservice api <br>
     * @Author mazq
     * @Date 2021/03/11 10:14
     * @Param [point, params, methodName]
     * @return java.lang.String
     */
    public static String doPostWebServiceURL(String point, String params, String soapAction)throws Exception {
        String result = "";
        // 创建HttpClientBuilder
	        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
	        // HttpClient
	        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
            HttpPost httpPost = new HttpPost(point);
        try {
            httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
            httpPost.setHeader("SOAPAction", soapAction);
            StringEntity data = new StringEntity(params,
                    Charset.forName("UTF-8"));
            httpPost.setEntity(data);
            CloseableHttpResponse response = closeableHttpClient
                    .execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                result = EntityUtils.toString(httpEntity, "UTF-8");
            }
        } catch (Exception e) {
            log.error("调用远程WebService接口异常:{}" , e);
            throw e;
        }finally {
            IOUtils.closeQuietly(closeableHttpClient);
        }
        return result;
    }

    /**
     * xml转换为JSONObject <br>
     * @Author nicky ma
     * @Date 2021/03/11 10:01
     * @Param [xmlStr]
     * @return com.alibaba.fastjson.JSONObject
     */
    public static JSONObject xml2Json(String xmlStr) throws DocumentException {
        Document doc = DocumentHelper.parseText(xmlStr);
        JSONObject json = new JSONObject();
        doParseXmlElements(doc.getRootElement() , json);
        return json;
    }

    /**
     * xml Document Elements解析 <br>
     * @Author nicky ma
     * @Date 2021/03/11 10:01
     * @Param [element, json]
     * @return void
     */
    public static void doParseXmlElements(Element element, JSONObject json) {
        List<Element> chdEl = element.elements();
        for(Element e : chdEl){
            if (!e.elements().isEmpty()) {
                JSONObject chdjson = new JSONObject();
                doParseXmlElements(e, chdjson);
                Object o = json.get(e.getName());
                if (o != null) {
                    JSONArray jsona = null;
                    if (o instanceof JSONObject) {
                        JSONObject jsono = (JSONObject) o;
                        json.remove(e.getName());
                        jsona = new JSONArray();
                        jsona.add(jsono);
                        jsona.add(chdjson);
                    }
                    if (o instanceof JSONArray) {
                        jsona = (JSONArray) o;
                        jsona.add(chdjson);
                    }
                    json.put(e.getName(), jsona);
                } else {
                    if (!chdjson.isEmpty()) {
                        json.put(e.getName(), chdjson);
                    }
                }
            } else {
                if (!e.getText().isEmpty()) {
                    json.put(e.getName(), e.getText());
                }
            }
        }
    }

}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected Map<String , String> obtainTokenByHttp(String paramJson , String url) throws Exception {
     StringBuffer soapRequestParams = new StringBuffer();
     soapRequestParams.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.webservice.catalog.infotrust.com\">");
     soapRequestParams.append("<soapenv:Header/>");
     soapRequestParams.append("<soapenv:Body>");
     soapRequestParams.append("<ser:getToken>");
     soapRequestParams.append("<ser:in0>"+paramJson+"</ser:in0>");
     soapRequestParams.append("</ser:getToken>");
     soapRequestParams.append("</soapenv:Body>");
     soapRequestParams.append("</soapenv:Envelope>");
     logger.warn(String.format("request params:%s", soapRequestParams.toString()));

     String returnDatabase = WSHttpClientUils.doPostWebServiceURL(url , soapRequestParams.toString(),"");
     logger.warn(String.format("xml string:%s" , returnDatabase));
     com.alibaba.fastjson.JSONObject jsonObject = WSHttpClientUils.xml2Json(returnDatabase);
     com.alibaba.fastjson.JSONObject body = jsonObject.getJSONObject("Body");
     com.alibaba.fastjson.JSONObject getSafeTokenResponse = body.getJSONObject("getSafeTokenResponse");
     String out = getSafeTokenResponse.getString("out");
     com.alibaba.fastjson.JSONObject outJson = JSON.parseObject(out);
     String code = outJson.getString("code");
     String message = outJson.getString("message");
     String token = "";
     logger.warn(String.format("webservice api返回数据,code:%s,message:%s",code,
             message));
     if ("200".equals(code)) {
         token = outJson.getString("token");
     }
     if (logger.isInfoEnabled()) {
         logger.info(String.format("api token:%s", token));
     }
     Map<String,String> result = new HashMap<String, String>(2);
     result.put("token",token);
     return result;
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/10/20
7270
Java面试题及答案解析
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:
yaohong
2019/09/11
9440
【续】Java面试基础必备知识点,怼死面试官,从我做起
输入标题 小海哥的封面越骚,内容越有味的更新,马上接近尾声了,还有一个数据库更新,外加jvm深度解析,hashMap源码必读,最后放几篇大厂的 面试题,感谢大家这么长时间支持,小海最近可以收到好多粉丝的留言,有说喜欢的,也有说小海不好听的话的,但是我感觉,只要有一个粉丝从中受益,那更新就有必要,我就需要坚持下去,内容节选javaCodeGeeker译文以及来自粉丝的贡献,可看原文阅读 骚红面试系列合集 面试高峰期,如何应对面试官的jvm刁难,特写一篇jvm面经(第一部) Java面试Lin
用户1257393
2018/03/21
1.6K0
Java面试知识点总结(牛客网)
全部Java题目可参考:https://www.nowcoder.com/ta/review-java
chenchenchen
2022/11/29
6390
Java面试知识点总结(牛客网)
2021最新100道Java面试题【附答案解析】
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:
Java程序猿
2021/01/07
5K0
2021最新100道Java面试题【附答案解析】
Java 面试题经典 77 问(含答案)!
金三银四了,3月底,4月初,找工作换单位的黄金时期。4月初将会有有一大批职场人士流动。。。 作为Java开发码农的你是不是也在蠢蠢欲动,或者已经搞了几轮车轮战了? 我们为大家准备了 77 道经典 Java 面试题,如果你面试不力,基础还不够强,那么你或许会受用! 1、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 2、JDK和JRE的区别是什么? 3、static关键字是什么意思?Java中是否可以覆盖(override)一个private或者是 static的方法? 4、是否可以在
Java技术栈
2018/06/04
7060
【干货】2016Java高薪面试题第三波
问:Java中的两种异常类型是什么?他们有什么区别? 答:Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。 不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。 问:Java中Exception和Error有什么区别? 答:Exception和Error都是Throwable的子类。Excepti
老九君
2018/03/01
6430
【干货】2016Java高薪面试题第三波
java50道基础面试题
欢迎关注java技术学习之道,本公众号长期分享各种技术文章。 1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。 2.JDK和JRE的区别是什么? Java运行时环境(JRE)是将要执行Java程序
Tanyboye
2018/07/02
6490
115个Java面试题和答案——终极列表(上)
本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,第二篇主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servlet和JSP。
哲洛不闹
2018/09/18
3630
Java面试题
本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM ,如下图所示:
庞小明
2022/05/11
5710
Java面试题
Java的面试基础题(一)
Java虚拟机是一个可执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性
Demo_Yang
2019/03/20
1.6K0
Java的面试基础题(一)
初识JAVA:JAVA最全基础知识复习(超详尽!!值得收藏!)
1、面向对象的特征 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
葆宁
2022/05/06
3.5K0
2021版100道经典Java面试题及答案汇总(一)
发现网上的Java面试题大多数要么没有答案,要么不够全面,所以花了点时间搜集整理出100道Java面试题(本套Java面试题大全,全的不能再全,哈哈~)
Hopestarit
2021/11/19
1.7K0
2021版100道经典Java面试题及答案汇总(一)
Java面试题整理
Java面向对象 19. super()与this()的区别? This():当前类的对象,super父类对象。 Super():在子类访问父类的成员和行为,必须受类继承规则的约束 而this他代表当前对象,当然所有的资源都可以访问. 在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造. 而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
葆宁
2019/04/19
2.1K0
Java中级面试题1
1. 什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”? a) Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟 机执行的字节码文件。Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写 或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他 特性。 2. JDK 和 JRE 的区别是什么? a) Java 运行时环境(JRE)是将要执行 Java 程序的 J
java金融
2020/08/05
4440
JAVA高频216道面试题+答案!!面试必备
  在本篇文章开始之前,我想先来回答一个问题:我为什么要写这样一篇关于面试的文章?原因有三个:第一,我想为每一个为梦想时刻准备着的“有心人”,尽一份自己的力量,提供一份高度精华的 Java 面试清单;第二,目前市面上的面试题不是答案不准确就是内容覆盖面太窄,所以提供一份经典而又准确的面试题是非常有必要的;第三,本文会对部分面试题提供详细解读和代码案例,让读者知其然并知其所以然,从而学到更多的知识。
陈哈哈
2021/10/13
1.1K0
java基础复习
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:
Java架构师历程
2018/09/26
1.4K0
百度搜索 “Java面试题” 前200页(面试必看)
本文中的题目来源于网上的一篇文章《百度搜索 “Java面试题” 前200页》,但该文章里面只有题目,没有答案。因此,我整理了一些答案发布于本文。本文整理答案的原则是尽量做到精简、点到即止(因为一般面试题的试卷里面的作答区域有限)。如果你有更好的答案,欢迎在评论区指出,或者给Github仓库提PR。
nnngu
2018/03/05
2.5K0
Java技术300+面试题
一年一度的面试高峰期又来了,技术学习群的很多朋友问我有没有关于Java基础面试题,网上各种面试题没有分类很混乱,无法系统性参考学习。
用户9843318
2022/06/20
8340
Java技术300+面试题
Java面试题库及答案解析
1、面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。 2、面向对象编程有哪些特性? 封装、继承、多态、抽象 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下的对象赋予了不同的访问权限。 下面列出了使用封装的好处: 通过隐藏对象的属性来保护对象内部的状态
nnngu
2018/03/15
1.2K0
相关推荐
走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验