webservice开发调用
1、调用第三方提供的webservice接口
1、获取报文信息
SoapUI-x64-5.2.1获取链接:https://pan.baidu.com/s/1iDKyUQXC4qjsKjHzdq3QcQ
提取码:s91m
2、调用
1、调用HTTP接口
public static String invokeService(String serviceURL,String soapXML) {String str = "";try {//第一步:创建服务地址URL url = new URL(serviceURL);//第二步:打开一个通向服务地址的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();//第三步:设置参数 //3.1发送方式设置:POST必须大写connection.setRequestMethod("POST");//3.2设置数据格式:content-typeconnection.setRequestProperty("content-type", "text/xml;charset=utf-8");connection.setRequestProperty("SOAPAction","text/xml;charset=utf-8");//3.3设置输入输出,因为默认新创建的connection没有读写权限,connection.setDoInput(true);connection.setDoOutput(true);//第四步:组织SOAP数据,发送请求//将信息以流的方式发送出去OutputStream os = connection.getOutputStream();os.write(soapXML.getBytes("utf-8"));os.close();int responseCode = connection.getResponseCode();if (responseCode < HttpURLConnection.HTTP_BAD_REQUEST) {InputStream is = connection.getInputStream();InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String temp = null;while (null != (temp = br.readLine())) {sb.append(temp);}br.close();str = sb.toString();}else {InputStream is = connection.getErrorStream();InputStreamReader isr = new InputStreamReader(is,"utf-8");BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String temp = null;while(null != (temp = br.readLine())){sb.append(temp);}br.close();str = sb.toString();}} catch (IOException e) {logger.warn(e.getMessage());}return str;}
2、调用HTTPS接口
如果服务端设置了证书校验,调用https接口就会出现证书问题,请求端可以设置跳过证书校验。
public static String invokeHttpsService(String serviceURL,String soapXML) {String str = "";try {SSLContext sslcontext = SSLContext.getInstance("SSL", "SunJSSE");TrustManager[] tm = {new MyX509TrustManager()};try {sslcontext.init(null, tm, new SecureRandom());} catch (KeyManagementException e) {e.printStackTrace();}HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {public boolean verify(String s, SSLSession sslsession) {System.out.println("WARNING: Hostname is not matched for cert.");return true;}};HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());} catch (NoSuchAlgorithmException e) {logger.warn(e.getMessage());} catch (NoSuchProviderException e) {logger.warn(e.getMessage());}try {//第一步:创建服务地址URL url = new URL(serviceURL);//第二步:打开一个通向服务地址的连接HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();//第三步:设置参数 //3.1发送方式设置:POST必须大写connection.setRequestMethod("POST");//3.2设置数据格式:content-typeconnection.setRequestProperty("content-type", "text/xml;charset=utf-8");connection.setRequestProperty("SOAPAction","text/xml;charset=utf-8");//3.3设置输入输出,因为默认新创建的connection没有读写权限,connection.setDoInput(true);connection.setDoOutput(true);//第四步:组织SOAP数据,发送请求//将信息以流的方式发送出去OutputStream os = connection.getOutputStream();os.write(soapXML.getBytes("utf-8"));os.close();int responseCode = connection.getResponseCode();if (responseCode < HttpURLConnection.HTTP_BAD_REQUEST) {InputStream is = connection.getInputStream();InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String temp = null;while (null != (temp = br.readLine())) {sb.append(temp);}br.close();str = sb.toString();}else {InputStream is = connection.getErrorStream();InputStreamReader isr = new InputStreamReader(is,"utf-8");BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String temp = null;while(null != (temp = br.readLine())){sb.append(temp);}br.close();str = sb.toString();}} catch (IOException e) {logger.warn(e.getMessage());}return str;}
附上 X509TrustManager 类代码
public class MyX509TrustManager implements X509TrustManager{@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}
}
2、开发webservice接口
1、逻辑实现类
package com.example.webservice;import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import java.util.ArrayList;
import java.util.List;@WebService
public class StudentServiceImpl{@WebResult(name = "responseCode")public ResponseCode getScores(@WebParam(name = "name")String name) {Student student = new Student();student.setName(name);student.setCode("123");List<Score> list = new ArrayList<>();Score score = new Score();score.setName("语文");score.setScore("150");Score score1 = new Score();score1.setName("数学");score1.setScore("140");list.add(score);list.add(score1);ResponseCode responseCode = new ResponseCode();responseCode.setCode("200");responseCode.setMsg("操作成功");responseCode.setMsg(list.toString());return responseCode;}@WebResult(name = "responseCode")//WebParam不指定name,则wsdl的参数为arg0、arg1、arg2....public ResponseCode addStudents(@WebParam(name = "students") List<Student> students) {for (Student student : students) {System.out.println("code:" + student.getCode());System.out.println("name:" + student.getName());System.out.println("scores:" + student.getScores());}ResponseCode responseCode = new ResponseCode();responseCode.setCode("200");responseCode.setMsg("操作成功");return responseCode;}
}
学生类
package com.example.webservice;import java.util.List;public class Student {private String name;private String code;private List<Score> scores;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public List<Score> getScores() {return scores;}public void setScores(List<Score> scores) {this.scores = scores;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", code='" + code + '\'' +", scores=" + scores +'}';}
}
分数
package com.example.webservice;public class Score {private String score;private String name;public String getScore() {return score;}public void setScore(String score) {this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Score{" +"score='" + score + '\'' +", name='" + name + '\'' +'}';}
}
返回类
package com.example.webservice;public class ResponseCode {private String code;private String msg;private String data;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getData() {return data;}public void setData(String data) {this.data = data;}
}
2、根据名称获取学生的分数
请求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.example.com/"><soapenv:Header/><soapenv:Body><web:getScores><!--Optional:--><name>张三</name></web:getScores></soapenv:Body>
</soapenv:Envelope>
返回
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:getScoresResponse xmlns:ns2="http://webservice.example.com/"><responseCode><code>200</code><msg>[Score{score='150', name='语文'}, Score{score='140', name='数学'}]</msg></responseCode></ns2:getScoresResponse></S:Body>
</S:Envelope>
3、增加学生的分数
请求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.example.com/"><soapenv:Header/><soapenv:Body><web:addStudents><!--Zero or more repetitions:--><students><!--Optional:--><code>1</code><!--Optional:--><name>张三</name><!--Zero or more repetitions:--><scores><!--Optional:--><name>语文</name><!--Optional:--><score>150</score></scores><scores><!--Optional:--><name>数学</name><!--Optional:--><score>149</score></scores></students><students><!--Optional:--><code>2</code><!--Optional:--><name>李四</name><!--Zero or more repetitions:--><scores><!--Optional:--><name>语文</name><!--Optional:--><score>130</score></scores><scores><!--Optional:--><name>数学</name><!--Optional:--><score>150</score></scores></students></web:addStudents></soapenv:Body>
</soapenv:Envelope>
后台处理
返回
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:addStudentsResponse xmlns:ns2="http://webservice.example.com/"><responseCode><code>200</code><msg>操作成功</msg></responseCode></ns2:addStudentsResponse></S:Body>
</S:Envelope>
webservice开发调用相关推荐
- WebService C#开发/调用
简单描述C#开发WebService操作步骤以及调用方式 WebService开发 第一步:创建Web空项目 第二步:为创建的Web空项目添加Web服务 第三步:实现WebService方法(仅供参考 ...
- Webservice开发流程
2019独角兽企业重金招聘Python工程师标准>>> Webservice简单的介绍 Webservice开发使用的通信协议是SOAP,支持简单对象的访问 Webservice的发 ...
- C++、C#写的WebService相互调用
首先感谢永和兄提供C++的WebService服务器端及客户端,并且陪我一起熬夜:然后是火石和我做接口的兄弟,虽然都不知道你叫什么,如果没有你的合作,东西也没那么快完成. 一.由于公司运营火石的< ...
- WebService开发常用功能详解
一.WebService中常用的属性(Attributes)1. Web Service(Web服务)提供以下三个属性. Namespace:此属性的值包含 XML Web Service的默 ...
- axis2 webService开发 附深入理解 Java 垃圾回收机制
相关文章: axis web服务(axis2安装和eclipse.tomcat结合开发) axis2 webService开发 axis2 webService开发(打包aar文件) 使用Axis2开 ...
- WebService开发与代码的编写
WebService开发与代码的编写 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的 ...
- java WebService接口调用WSDL详细解析
0.前言 有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户(或后台)给你一个WSDL文件(或网址),说按照上面的进行适配, 这时就要对WebService ...
- 基于soap协议的webservice开发
1.利用cxf进行webservice开发,因此需要去官网下载cxf的jar包. 2.eclispe建立工程,引入jar包. 3.编写对外发布的接口: 4.编写实现类: 5.编写对外发布的类: 6.启 ...
- WebService开发教程
一.webservice 开发 1.webservice介绍 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它 ...
最新文章
- Why gdb crash if create too many threads ?
- 新建一个doophp项目
- 解决idea中连接MySQL数据库后写SQL语句没有提示
- 数据库SQL优化大总结之 百万级数据库优化方案(转)
- centos7 git安装
- sonar:默认的扫描规则
- mysql 二进制 存储格式化_解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT
- vue项目使用大华摄像头怎样初始化_Vue接入监控视频技术总结
- html自动滚屏效果,jQuery实现公告新闻自动滚屏效果实例代码
- git冲突解决办法合集
- Android数据库操作-1
- 日常一些需要搜索,需要花功夫但又简单的东西 此文会持续更新
- SURF源码分析之fasthessian.h和fasthessian.cpp
- 利用Python下载网络小说并保存到本地文件
- Android之仿ele地图定位效果
- 【MediaSoup】UDPSOCKET recv数据到rtcp包解析
- 最全电缆直径和电缆流过电流计算以及对照表
- 【MATLAB】基本绘图 ( 保存图像 | saveas 函数 )
- Alexa Top 1000 在中国的访问情况
- 计算机情绪识别属于什么方向,情绪检测器