WebService调用工具类对Sopa 1.1和Sopa 1.2都可以以及HTTP请求
对于已经提供了wsdl 的WebService服务的时候一般有sopa 1.1和 1.2的方式
或者是这样的
可以使用GET和POST 的HTTP请求调用
现在来第一种情况的编写属于我们自己的工具类把:
调用前先使用测试工具Storm_r1.1测试我们的服务调用的接口
输入URL地址:这里使用免费开源地址测试QQ是否在线
点击左侧的方法;获取XML传参拷贝下来
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><qqCheckOnline xmlns="http://WebXml.com.cn/"><qqCode /></qqCheckOnline></soap:Body>
</soap:Envelope>
然后编写我们的工具类:
先导入包:
<!-- dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency>
编写工具类:
/*** Project Name:StudySpringApp* File Name:WebSeriveUtil.java* Package Name:com.java.util* Date:2019年6月17日下午5:20:33* Copyright (c) ©1994-2019 Scjydz.com All Rights Reserved.
*/
package com.amt.util;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;/*** @Title: ServiceUtil.java* @Package com.amt.util* @Description: TODO(远程调用Service)* @author lys* @date 2019年6月17日 下午5:20:33 Copyright (c) ©1994-2019 Scjydz.com All Rights* Reserved.*/
public class ServiceUtil {// 远程调用url地址private static String ADDRESS = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";/*** @description: HttpURLConnection远程执行POST方法调用外部接口* @param address 外部url地址* @param method 调用方法* @param param 传参* @return 接口调用XML字符串* @throws Exception io异常*/public String requestWSDL(String method, String param) throws Exception {// 创建服务地址URL url = new URL(this.ADDRESS);// 打开一个通向服务地址的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置参数// 发送方式设置:POST必须大写connection.setRequestMethod("POST");// 设置数据格式:content-typeconnection.setRequestProperty("content-type", "text/xml;charset=utf-8");// 注意这里需要填服务暴露的地址和方法名组合connection.setRequestProperty("SOAPAction", "http://WebXml.com.cn/qqCheckOnline");// 设置输入输出,因为默认新创建的connection没有读写权限,connection.setDoInput(true);connection.setDoOutput(true);// 设置SOAP数据,发送请求String soapXML = getXML(method,param);// 将信息以流的方式发送出去OutputStream os = connection.getOutputStream();os.write(soapXML.getBytes());// 接收服务端响应
// int responseCode = connection.getResponseCode();StringBuilder sb = new StringBuilder();
// if (200 == responseCode) {// 服务端响应成功// 获取当前连接请求返回的数据流InputStream is = connection.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String temp = null;while (null != (temp = br.readLine())) {sb.append(temp);}is.close();isr.close();br.close();
// }os.close();return sb.toString();}/**** @description: 组装格式xml* @param RequestCode 业务代码* @param param 传参* @param method 接口方法* @return 完整soapXML传参信息*/private static String getXML(String method,String param) {StringBuffer requestXML = new StringBuffer();requestXML.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");requestXML.append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");requestXML.append("<soap:Body>");requestXML.append("<" + method + " xmlns=\"http://WebXml.com.cn/\">");requestXML.append("<qqCode>");if (!StringUtils.isEmpty(param)) {requestXML.append(param);}requestXML.append("</qqCode>");requestXML.append("</" + method + ">");requestXML.append("</soap:Body>");requestXML.append("</soap:Envelope>");return requestXML.toString();}public static void main(String[] args) throws Exception {String repString = ServiceUtil.requestWSDL("qqCheckOnline","273991209");// 查看调用结果System.out.println(repString);}}
结果如下:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><qqCheckOnlineResponse xmlns="http://WebXml.com.cn/"><qqCheckOnlineResult>Y</qqCheckOnlineResult></qqCheckOnlineResponse></soap:Body></soap:Envelope>
返回了一个XML字符串给我们,这个时候我们就dom4j解析XML串
public static void main(String[] args) throws Exception {String repString = WebServiceUtil.requestWSDL("qqCheckOnline","273991209");// 查看调用结果
// System.out.println(repString);//解析数据Document doc = DocumentHelper.parseText(repString);// 报文转成doc对象Element root = doc.getRootElement();Element rest = root.element("Body").element("qqCheckOnlineResponse").element("qqCheckOnlineResult");System.out.println(rest.getText());}}
解析后完成返回:
Y代表QQ在线。
那么第二种情况我们就得改方法了:
首先可以看见他入参的方式不一样了:
是xmlpara=string 注意这里不一样了
那么我们就把方法改一下:
/*** @description: HttpURLConnection远程执行POST方法调用外部接口* @param address 外部url地址* @param RequestCode 业务代码* @param xml 传参格式为<id>1</id><name>张三</name>* @return 接口调用XML字符串* @throws Exception io异常*/public static String requestWSDL(String method, String xml) throws Exception {OutputStreamWriter oStream = null;BufferedReader reader = null;StringBuffer sbf = new StringBuffer();URL url = new URL(ADDRESS + method);HttpURLConnection con = (HttpURLConnection) url.openConnection();con.setRequestMethod("POST");con.setRequestProperty("Accept-Encoding", "gzip,deflate");con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");con.setDoInput(true);con.setDoOutput(true);oStream = new OutputStreamWriter(con.getOutputStream(), "UTF-8");oStream.write(xml);oStream.flush();oStream.close();reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));String line;while ((line = reader.readLine()) != null) {sbf.append(line);}reader.close();oStream.close();con.disconnect();if (oStream != null) {oStream.close();}if (reader != null) {reader.close();}return sbf.toString();}
调用的时候需要这样:
String xml = "<name>张三<name>";
WebServiceUtil.requestWSDL("调用的方法", "xmlpara=" + xml);
返回结果也是XML字符串需要自己解析
WebService调用工具类对Sopa 1.1和Sopa 1.2都可以以及HTTP请求相关推荐
- Android开发之访问WebService的工具类
Android中使用WebService通讯,下面对访问WebService的工具类进行记录 package com.wjy.project.railway.tools;import android. ...
- Android中调用webservice的工具类
最近学习WebService,感觉利用这个借口开发网站的Android客户端方便及了,用到一个工具类,这里铭记一下. public static final String WebServiceName ...
- Redis的API调用工具类
1.一个Redis的工具类!方便调用Redis的API操作! package com.example.demo.utils;import org.springframework.beans.facto ...
- 百度云内容审核api调用工具类
1.引入maven依赖 2. package com.ck.common.aip;import com.alibaba.fastjson.JSONObject; import com.baidubce ...
- WebService工具类调用远程接口服务时java.io.IOException: Server returned HTTP response code: 500 for URL XXX
问题描述:在本地测试时,使用个人封装的Webservice代码工具类调用远程接口服务时,一切正常.但是一旦将该代码放到一个已有项目的中使用时,就会出现如下所示的错误提示 java.io.IOExcep ...
- Android 通过WebService进行网络编程,使用工具类轻松实现
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢! 相信大家 ...
- 使用WebService进行网络编程【工具类】
相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人 ...
- Java 调用接口工具类并设置请求和传输超时时间
废话不多说直接上代码 /*** 接口调用工具类* @Author: MonsterTiny* @Date: 2020-07-23 10:06*/ public class HttpClientUtil ...
- 史上最全的常用开发工具类收集Android
API 银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验 ...
最新文章
- uml+oopc嵌入式c语言开发精讲_嵌入式开发中更接近底层的汇编与C语言
- Kubernetes[3]-Server
- 计算机讲Word文档中的组合,电脑Word文档中两个表格如何合并
- 如何提高电路工作频率
- 网络模块封装-axio
- LED背光源的技术术语
- js拆分百分数_计算百分比Javascript
- 目标检测数据集:直升机(1)
- Excise_Oop2
- 【Apollo 6.0项目实战】Perception模块
- Mac Mounty正常卸载方法(mount failed异常解决)
- ios开发原生的扫描二维码的实现以及限制扫描区域rectOfInterest遇到的一些坑
- Unity自动提取优化Fbx模型动画文件,并生成ab包文件大小对比信息
- md5 java 实现_MD5加密的Java实现
- canvas手绘正五边形
- 99.9%的努力毁于0.1%的失误
- stm32中cubmx+keil+proteus+虚拟串口+串口助手的使用
- 迷失lost结局什么意思_《迷失》今晨结局:多个谜团依然未解(剧透)
- 区块链时代正开启 中原精英探讨区块链未来 ----2018华中首届区块链论坛郑州开幕
- WordPress博客连接微信小程序
热门文章
- ASEMI代理ADM3251EARWZ-REEL原装ADI车规级ADM3251EARWZ-REEL
- π型人才热潮B面,环球网校的升维之道
- 1095. Cars on Campus (30)
- 微信视频通话概括-测试用例
- mysql索引优化原则:覆盖索引、最左前缀原则、索引下推
- rstudio安装后如何打开_Rstudio安装及安装问题总结
- 地级市各类交通工具的客货运量和拥有量指标
- “电子游戏之父”去世享年92岁 发明首台游戏机
- C++ 学习 ::【基础篇:13】:C++ 类的基本成员函数:类类型成员的初始化与构造函数问题
- postgreSQL查询 获取行号 rownum,解决方案