Java调用WebServices接口

当拿到一个WebServices接口时,首先用接口测试工具调用一下接口,看是否可以正常发送请求和获取返回接口,确保接口是没有问题的,可以用SoapUI工具进行测试。

下面以一个免费的天气预报接口为例,记录整个接口的调用过程。

接口地址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

打开SoapUI,点击SOAP,在弹出的新建页面输入接口地址,在地址后面拼接上 ?wsdl ,点击OK。

会看到在左侧地方显示该接口可以调用的每个方法。

获取上海的天气信息:

点击绿色剪箭头,就可以在右侧看到接口的返回结果。

以上就是用SoapUI工具进行接口测试的使用说明。

下面用Java代码来实现该接口的调用:

新建一个测试类 WebServiceTest

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;/*** @author: liangmeng* @description: WebService测试* @date: 2024/4/14 13:42* @version: 1.0*/
public class WebServiceTest {public static void main(String[] args) {String soapRequestXml = null;String soapResponseXml = null;String responseCode = null;HashMap<String, String> responseData = new HashMap<>();//soap报文soapRequestXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://WebXml.com.cn/\">\n" +"   <soapenv:Header/>\n" +"   <soapenv:Body>\n" +"      <web:getWeather>\n" +"         <web:theCityCode>上海</web:theCityCode>\n" +"         <web:theUserID>5fc88ce5ff404ce6ba1282125f68d258</web:theUserID>\n" +"      </web:getWeather>\n" +"   </soapenv:Body>\n" +"</soapenv:Envelope>";//发送post请求responseData = postSoap("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx", soapRequestXml, "http://WebXml.com.cn/getWeather");responseCode = responseData.get("responseCode");soapResponseXml = responseData.get("responseMsg");System.out.println("请求状态:"+responseCode);System.out.println("返回参数:"+soapResponseXml);}/*** @param postUrl: 请求地址* @param soapXml: 请求报文* @param soapAction: 请求方法名称* @return HashMap<String,String>* @author 梁萌* @description 发送POST请求* @date 2024/4/14 13:49*/public static HashMap<String, String> postSoap(String postUrl, String soapXml, String soapAction) {HashMap<String, String> hm = new HashMap<>();//响应结果StringBuilder result = new StringBuilder();//输出流OutputStream out = null;//字符缓冲输入流BufferedReader in = null;//状态响应码int responseCode = 0;try {//创建URLURL url = new URL(postUrl);//重要,WSDL路径,不带?wsdlURLConnection connection = url.openConnection();HttpURLConnection httpConn = (HttpURLConnection) connection;//设置参数httpConn.setRequestProperty("Content-Length", String.valueOf(soapXml.getBytes(StandardCharsets.UTF_8).length));httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");httpConn.setRequestProperty("SOAPAction", soapAction); //重要,调用接口的某个方法httpConn.setRequestMethod("POST");httpConn.setDoOutput(true);httpConn.setDoInput(true);//发送请求out = httpConn.getOutputStream();out.write(soapXml.getBytes(StandardCharsets.UTF_8));//状态响应码responseCode = httpConn.getResponseCode();//状态响应码=200in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), StandardCharsets.UTF_8));String inputLine;while ((inputLine = in.readLine()) != null) {result.append(inputLine);}} catch (Exception ex) {System.out.println("soap请求路径:" + postUrl + ",异常,响应状态码:" + responseCode + ",异常原因:" + ex.getMessage());hm.put("responseCode", responseCode + "");hm.put("responseMsg", ex.getMessage() + "");return hm;} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (Exception ex) {System.out.println("soap请求路径:" + postUrl + ",异常,响应状态码:" + responseCode + ",异常原因:释放资源失败");hm.put("responseCode", responseCode + "");hm.put("responseMsg", ex.getMessage() + "");return hm;}}//返回响应内容String soapResponse = result.toString();System.out.println("soap请求路径:" + postUrl + ",结束,响应状态码:" + responseCode + ",返回结果:" + soapResponse);hm.put("responseCode", responseCode + "");hm.put("responseMsg", soapResponse + "");return hm;}}

执行结果:

成功通过Java程序获取到了接口的返回信息。

代码中有几个需要注意的地方:

1.请求地址中不需要添加 ?wsdl

2.请求的方法名称(postSoap方法的第三个参数soapAction),需要与SoapUI工具中的soapAction参数值保持一致,参见下图的内容:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初学python记录:力扣2007. 从双倍数组中还原原数组

题目&#xff1a; 一个整数数组 original 可以转变成一个 双倍 数组 changed &#xff0c;转变方式为将 original 中每个元素 值乘以 2 加入数组中&#xff0c;然后将所有元素 随机打乱 。 给你一个数组 changed &#xff0c;如果 change 是 双倍 数组&#xff0c;那么请你返…

如何解决PPT中获取加载项是灰色的,无法链接到Power BI的问题?

问题描述&#xff1a; 最近有朋友留言询问:“在尝试之前我发布的如何在PPT中展示Power BI报告的操作步骤的时候&#xff0c;想要在PPT中展示Power BI报告&#xff1f;只需这样做&#xff01; (qq.com) 碰到在PowerPoint中【获取加载项选项】是灰色&#xff0c;无法链加载Powe…

【数据库】Oracle11g与Oceanbase3.2.3对比

一、数据库体系结构对比 数据库的体系结构是从某一个角度来分析和考察数据库的组成、工作过程与原理&#xff0c;以及数据在数据库中的组织与管理机制。 Oracle11g作为传统关系数据库的代表、Oceanbase作为分布式关系数据库的代表&#xff0c;体系结构上的设计差别很大。 &a…

【NLP】大语言模型基础之Transformer结构

大语言模型基础之Transformer结构 1. Transformer结构总览2. 嵌入表示层2. 注意力层3. 前馈层4. 残差连接与层归一化5. 编码器和解码器结构参考文献 Transformer是一种深度学习模型架构&#xff0c;由Vaswani等人于2017年在论文《Attention is All You Need》中首次提出。它在自…

【练习】二分查找思想

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 二分查找算法介绍 1.二分查找 题目描述 讲解 ​编辑 代码实现 2.…

STM32应用开发——BH1750光照传感器详解

STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…

【剪映专业版】10时间线工具:主轨磁吸、自动吸附、联动、预览轴、全局缩放预览

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 主轨&#xff1a;有封面标志的轨道才是主轨。 主轨磁吸&#xff1a;开启后&#xff0c;在主轨上移动素材&#xff0c;自动向前磁吸&#xff0c;在其他轨道上移动无此效果&#xff1b;关闭后&#xff0c;不自动向前磁吸&…

6个步骤轻松实现Postman接口压力测试(建议收藏)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这里讲是postman做接口并发测试&#xff0c;基础用法不做…

这些年背过的面试题--MySQL篇

MySQL一直是面试中的热点问题&#xff0c;也难道了很多的面试者。其实MySQL没那么难&#xff0c;只是大家没有系统化、实战性的过去学习、总结。同时很多开发者在实际的开发过程中也很少去接触一些偏向底层的知识。 本手册&#xff0c;已总结成完整的PDF文档。想获取该文档&am…

opencv的cmake报错

opencv编译报错 CMakeDownloadLog.txt #use_cache "D:/opencv/.cache" #do_unpack "ippicv_2021.8_win_intel64_20230330_general.zip" "71e4f58de939f0348ec7fb58ffb17dbf" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/1…

遇事不决 量子力学?

文章目录 引入量子力学产生的必然性量子力学名称的由来粒子&#xff1f;波&#xff1f;波粒二象性测不准原理 &#xff08;不确定原理&#xff09;叠加态原理 量子纠缠态叠加量子纠缠量子纠缠实验 逻辑判断&#xff0c;量子力学到底完善吗观测量子纠缠&#xff1f;那我们宏观世…

快慢指针的应用

快慢指针的原理 快慢指针是利用两个指针移动速度的不一样&#xff0c;实现一些有趣的追击行为。就像上学时求解的那些操场上的追击问题一样。 问题1&#xff1a;判断两个链表是否相交。&#xff08;链表不存在环结构&#xff09; 形如&#xff1a; 方法&#xff1a;循环第一…

谷歌开源专业代码模型:对硬件要求低,性能超强!

谷歌发布了面向企业、开发人员的全新代码模型Code Gemma&#xff0c;一共有基础预训练、指令微调和快速推理三个版本。 Code Gemma是基于谷歌在今年2月发布的Gemma模型之上开发而成。其参数很小只有20亿和70亿两种&#xff0c;但使用了超过5000亿tokens的代码、数学、文本等数…

vue2和vue3的v-if与v-for优先级对比

Vue.js 中使用最多的两个指令就是 v-if 和 v-for&#xff0c;因此我们可能会想要同时使用它们。虽然官方不建议这样做&#xff0c;但有时确实是必须的&#xff0c;我们来了解下他们的工作方式&#xff1a; 在 vue 2.x 中&#xff0c;在一个元素上同时使用 v-if 和 v-for 时&am…

【第七届openGauss技术文章征集】 openGauss新版本征文活动来啦!

活动背景 2024年3月30日&#xff0c;openGauss 6.0.0版本正式上线&#xff0c;该版本与之前版本特性功能保持兼容&#xff0c;在内核能力、DataPod三层资源池化架构、DataKit数据全生命周期管理平台、生态兼容性等方面全面增强。&#xff08;下方【点击原文】即可查看更多【新…

【GPT-4最新研究】GPT-4与科学探索:揭秘语言模型在科学领域的无限可能

各位朋友们&#xff0c;你们知道吗&#xff1f;自然语言处理领域最近取得了巨大的突破&#xff01;大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;简直就像打开了新世界的大门。它们不仅在语言理解、生成和翻译方面表现出色&#xff0c;还能涉足许多其他领域&…

【绘图案例-屏幕截图 Objective-C语言】

一、屏幕截图 1.接下来,我们来说这个屏幕截图, 1.看一下我们的ppt, 屏幕截图呢,核心代码,也就是一句话, 我们看ppt上说,有时候需要从屏幕上的某一个View啊,截取一个图片出来,然后呢,这个里边儿,它举的一个例子,就是这个东西,捕鱼达人的这个图片,实际上,屏幕截图…

突破界限:LangChain 引领 AI 应用构建的新时代

前言 在上一篇文章中我们对 ChatWithPDF 的方案设计进行了整体的概览&#xff0c;现在细化下整体流程&#xff0c;如下图所示&#xff1a; 针对上面的流程&#xff0c;我们思考&#x1f914;一下会面临的问题&#xff1a; 如何读取 PDF 中的内容&#xff1f;&#xff08;肯定…

一些重新开始面试之后的八股文汇总

一、内存中各项名词说明 1、机器内存概念说明 linux中的free命令可以查看机器的内存使用情况&#xff0c;vmstat命令也可以 其中不容易被理解的是&#xff1a; 内存缓冲/存数&#xff08;buffer/cached&#xff09; 1.buffers和cache也是RAM划分出来的一部分地址空间 2.buff…

如何利用逻辑引擎的对象变量节点优化表单数据处理?

JVS逻辑引擎-对象变量节点 概述 对象变量是面向对象编程中的一个重要概念。在编程中&#xff0c;对象变量用于存储对象的引用。在Java中&#xff0c;使用“类名变量名”可以创建一个对象变量&#xff0c;但此时对象变量本身并没有任何值。要赋予对象变量具体的值&#xff0c;…