Http方式发送Soap报文调用WebService
WebService的实现方式之一就是基于HTTP发送SOAP报文进行调用。
可能由于各种原因,我们不能使用CXF、AXIS等框架调用,此时的解决方案之一就是直接基于HTTP发送SOAP报文,然后将响应报文当作XML进行处理。
废话不多,直接上代码:
需要导入类:
1 import org.apache.commons.httpclient.HttpClient;
2 import org.apache.commons.httpclient.UsernamePasswordCredentials;
3 import org.apache.commons.httpclient.auth.AuthScope;
4 import org.apache.commons.httpclient.methods.PostMethod;
5 import org.apache.commons.httpclient.methods.RequestEntity;
6 import org.apache.commons.httpclient.methods.StringRequestEntity;
7 import org.apache.commons.httpclient.params.HttpClientParams;
核心代码:
private String invokeService(String operationName, BaseRequestModel requestModel) throws Exception {
String url = endpointUrl;
String userName = "beiifeng";
String password = "beiifeng";
int timeOut = 60;
String targetNameSpace = "http://service.ws.beiifeng.com";
// 创建Http客户端
HttpClient httpclient = new HttpClient();
// 权限用户验证
httpclient.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
PostMethod post = null;
try {
post = new PostMethod(url);
HttpClientParams params = new HttpClientParams();
params.setSoTimeout(timeOut * 1000);
httpclient.setParams(params);
RequestEntity entity = new StringRequestEntity(this.formatSOAPRequest(operationName, targetNameSpace, requestModel), "text/xml", "UTF-8");
post.setRequestEntity(entity);
int result = httpclient.executeMethod(post);
//异常
String res = post.getResponseBodyAsString();
if (result != 200) {
throw new RuntimeException("调用webservice失败:服务器端返回HTTP code " + result + "\n信息:" + res);
}
return res;
} catch (Exception e) {
throw e;
} finally {
if (post != null) {
post.releaseConnection();
}
}
}
private String formatSOAPRequest(String operationName, String targetNameSpace, BaseRequestModel requestModel) {
StringBuffer sb = new StringBuffer();
sb.append("<SOAP-ENV:Envelope xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://" +
"www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instanc" +
"e\">\n");
sb.append("<SOAP-ENV:Body>\n");
sb.append("<m:" + operationName + " xmlns:m=\"" + targetNameSpace + "\">\n");
sb.append(requestModel.requestModelToString());
sb.append("</m:" + operationName + ">\n");
sb.append("</SOAP-ENV:Body>\n");
sb.append("</SOAP-ENV:Envelope>\n");
return sb.toString();
}
请求实体类继承自BaseRequestModel,代码如下:
public abstract class BaseRequestModel {
/**
* 将请求实体转换为类似XML字符串
*
* @return soapAction中的XML格式字符串
*/
public abstract String requestModelToString();
}
总结:其中滋味,各位看客自行体会:p
<<endl
Http方式发送Soap报文调用WebService的更多相关文章
- java使用POST发送soap报文请求webservice返回500错误解析
本文使用JAX-WS2.2编译webservice,并使用HttpUrlConnection的POST方式对wsdl发送soap报文进行请求返回数据, 对错误Server returned HTTP ...
- python通过http请求发送soap报文进行webservice接口调用
最近学习Python调用webservice 接口,开始的时候主要采用suds 的方式生产client调用,后来发现公司的短信接口采用的是soap报文来调用的,然后开始了谷歌,最后采用httplib ...
- Java 发送SOAP请求调用WebService,解析SOAP报文
https://blog.csdn.net/Peng_Hong_fu/article/details/80113196 记录测试代码 SoapUI调用路径 http://localhost:8082/ ...
- HttpURLConnection 直接发送soap消息调用webservice
httpConn = (HttpURLConnection) new URL(urlString).openConnection(); httpConn.setRequestProperty(& ...
- C#如何使用Soap协议调用WebService?
WebService是什么?它的作用? WebService是一个平台独立.低耦合的.自包含的.基于可编程的可使用xml描述.调用的web应用程序,用于开发分布式的交互式的应用程序. Soap是什么? ...
- Jmeter发送SOAP请求对WebService接口测试
Jmeter发送SOAP请求对WebService接口测试 1.测试计划中添加一个用户自定义变量 2.HTTP信息头管理器,添加Content-Tpe, application/soap+xml;c ...
- Java发布webservice应用并发送SOAP请求调用
webservice框架有很多,比如axis.axis2.cxf.xFire等等,做服务端和做客户端都可行,个人感觉使用这些框架的好处是减少了对于接口信息的解析,最主要的是减少了对于传递于网络中XML ...
- Java 用HTTP的方式发送JSON报文请求
前言: 项目调用第三方接口时,通常是用socket或者http的通讯方式发送请求:http 为短连接,客户端发送请求都需要服务器端回送响应,请求结束后,主动释放链接.Socket为长连接:通常情况下S ...
- Java调用WebService方法总结(8)--soap.jar调用WebService
Apache的soap.jar是一种历史很久远的WebService技术,大概是2001年左右的技术,所需soap.jar可以在http://archive.apache.org/dist/ws/so ...
- 发送Http请求调用webService
如果调用WebService的不是在.NET中,无法直接添加web引用,那怎么调用webservice. 有两种方式 第一种方式:GET方式 string strUrl = "http:// ...
随机推荐
- Web学习篇—Http协议
Http协议简介 h3 { background: rgba(0, 154, 205, 1); color: rgba(255, 255, 255, 1); border-radius: 6px; f ...
- html 1.0
<html><head> <title></title></head><body><h3 align="cent ...
- Mysql数据库简单常用语句
Mysql数据库简单常用语句 1.命令连接数据库 mysql -h 127.0.0.1 -u root -p 2.新增用户 GRANT SELECT on 数据库.* to 用户名@登录主机 iden ...
- NTP网络时间服务器(时间同步服务器)产品介绍及技术研究分析
NTP网络时间服务器(时间同步服务器)产品介绍及技术研究分析 目前,市场上的NTP网络时间服务器鱼龙混杂,厂家良莠不齐,对此选择一家有实力的厂家及性价比高的NTP网络时间服务器厂家显得尤其重要. NT ...
- Win10用户目录迁移后变成英文的修改办法
比如我的目录从C:\Users\Lemon修改到D:\Users\Lemon后: 1.首先可以将Windows文件管理器选项中的"隐藏受保护的操作系统文件"去掉,就可以看到每个目录 ...
- docker安装postgres并启用postgis扩展
镜像 查看所有镜像 docker images 可以直接拉取postgis镜像 docker pull postgis 也可以在已有镜像上安装postgres,再启用扩展: docker pull p ...
- ptyhon基础课程_3
14 综上练习题 评分规则: A:>=90 B:>=80 C:>=70 D:其他 用户输入成绩,根据成绩显示不同的级别 score = input ("请输入您的成绩:&q ...
- 视频直播系统源码,java 随机验证码 、10 分钟有效
视频直播系统源码,java 随机验证码 .10 分钟有效 1.首先创建一个vo类存放我们验证码相关信息. import lombok.AllArgsConstructor;import lombok. ...
- Day20:update功能的实现
今日完成的任务: 1.将最初设想的消息界面删除,删去message和chat等无参数跳转界面,并在物品详情中增加[联系方式]一栏供大家线下交易使用. 最终完成界面如下 2.实现本个小程序最后一个功能- ...
- webpack5用url-loader(file-loader)处理图片和img-loader压缩图片
webpack-cli 4.0的版本和 webpack-dev-server 3.11.0的版本不兼容,只能用webpack@5.0 + webpack-cli@3.3.12 + webpack-de ...