java对接c++发布的webservice接口,其中参数类型有base64Binary格式(无需将图片数据转化为c++中的结构体)
接口名称:
std::string SendVehiclePass(std::string VehiclePassInfo, struct xsd__base64Binary
PlatePicData, struct xsd__base64Binary CarPic1, struct xsd__base64Binary CarPic2,
struct xsd__base64Binary CarPic3)
参数说明:
VehiclePassInfo:过车信息详情 xml,具体如下:
<?xml version="1.0" encoding=" UTF-8 " standalone="yes" ?>
<ROOT>
<KKMY>卡口密钥<KKMY>
<KKBH>卡口编号</KKBH>
<JGSK>经过时刻</JGSK>
<CDBH>车道编号</CDBH>
<HPHM>号牌号码</HPHM >
<HPYS>号牌颜色</HPYS >
<HPZL>号牌种类</HPZL>
<CLSD>车辆速度</CLSD>
<CWKC>车外廓长</CWKC>
<CSYS>车身颜色</CSYS>
<CLLX>车辆类型</CLLX>
<SSYF>实时与否</SSYF>
<CLZPP1>车辆主品牌</CLZPP2>
<CLZPP2>车辆子品牌</CLZPP2>
<CLNK>车辆年款</CLNK>
<ZJSAQDZT>主驾驶安全带状态</ZJSAQDZT>
<FJSAQDZT>副驾驶安全带状态</FJSAQDZT>
<ZJSZYBZT>主驾驶遮阳板状态</ZJSZYBZT>
<FJSZYBZT>副驾驶遮阳板状态</FJSZYBZT>
<SFDDH>是否打电话</SFDDH>
<SFHBC>是否黄标车</SFHBC>
<SFWXPC>是否危险品车</SFWXPC>
<SFYGJ>是否有挂件</SFYGJ>
<CDFX>车道方向</CDFX>
</ROOT>
PlatePicData:车牌特征小图片信息,最大 20K,可以为空。**
CarPic1:车辆图片1,最大 1.5M,不能为空。
CarPic2:车辆图片2,最大 1.5M,可以为空。
CarPic3:车辆图片3,最大 1.5M,可以为空。
所有以上图片信息若超过规定大小请自行压缩。
车辆图片按照从左到右依次赋值,如果有一张图片,则赋值到 CarPic1,有两张则依次赋值
CarPic1,CarPic2,依此类推。PlatePicData:只存车牌小图片。
struct xsd__base64Binary
{
unsigned char* __ptr;//图片数据缓冲区
int __size;//图片数据大小
};
我使用的Hutool,就可以在无任何依赖的情况下,实现简便的WebService请求,需要引入的pom文件:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
<version>5.4.3</version>
</dependency>
核心代码:
String c1 = ImageUtil.imageToBase64(CarPic1);
// 新建客户端
SoapClient client = SoapClient.create("接口url")//例如:http://127.0.0.1:8888
// 设置要请求的方法,传入对应的命名空间
.setMethod("SendVehiclePass", "http://tempuri.org/ns.xsd")
// 设置参数
.setParam("VehiclePassInfo", msg)
.setParam("PlatePicData", null)
.setParam("CarPic1", c1)
.setParam("CarPic2", null)
.setParam("CarPic3", null);
// 发送请求,参数true表示返回一个格式化后的XML内容
// 返回内容为XML字符串,可以配合XmlUtil解析这个响应
String result = client.send(true);
logger.info("返回的数据:{}",result);
根据图片的url地址转化为Base64编码的字符串:
/**
* 将图片编码为base64
* @param url 图片的url地址
* @return 返回Base64编码过的字节数组字符串
* @throws IOException
*/
public static String imageToBase64(String url) throws IOException {
URL urlContent = new URL(url);
HttpURLConnection con = (HttpURLConnection)urlContent.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5 * 1000);
InputStream inStream = con .getInputStream();//通过输入流获取图片数据
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int len = 0;
while( (len=inStream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
inStream.close();
byte[] data = outStream.toByteArray();
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
亲测有效
java对接c++发布的webservice接口,其中参数类型有base64Binary格式(无需将图片数据转化为c++中的结构体)的更多相关文章
- Java调用IIS发布的WebService
之前的一篇博客说了一个实例,就是用VS2005在IIS上发布WebService.今天我们来实现在Eclipse上用Java来调用昨天发布的WebService. 首先咋在浏览器中输入http://1 ...
- Java利用Axis远程调用WebService接口
准备工作: 主要依赖的包: 1.axis.jar 官网:http://axis.apache.org/axis/ 2.jaxrpc.jar 下载地址:http://www.java2s.com/Cod ...
- 使用soapUI5.3.0调试webservice接口(参数为XML格式)
最近项目中经常要调试webservice接口,从朋友处了解到他们经常使用SoapUI,因此学习一下这个工具的使用,为避免遗忘,特地记录下来,分享分享... 下载 #####首先,下载SoapUI,我下 ...
- [PHP] PHP服务器接口SAPI中的结构体
SAPI:在各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口.例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等 1.结构体:使用结构体(Struc ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- java调用peoplesoft提供的webservice接口
使用到了soapui,apache-cxf,eclipse 1.使用soapui测试提供的地址有效性(如果没有soapui也可以直接在cmd命令行中使用wsdl2java命令生成客户端代码) wsdl ...
- STL set接口中使用结构体类型
需要在结构体中重载'<'运算符,下面是我写的一个例子: #include<iostream> #include<set> using namespace std; str ...
- java调用 C# webservice接口
java调用webservice接口方式有多种,本人很懒,测试一种满足我的需求,故为试验其他方法,仅供参考 一:工具 MyEclipse,C#编码发布的webservice接口 二:步骤 1.打开my ...
- webservice接口的开发和调用
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
随机推荐
- Python_Selenium 之以login_page为例实现对basepage封装好的方法调用和对common中公共方法的调用
目的:简化代码,提供框架该有的东西每一个函数 -提供了一个功能 - 公共的功能有了basepage,在PageObjects当中直接调用元素操作. 以下以login_page 为例,实现从配置文件中读 ...
- Springboot-Redis分布式锁 -----StringRedisTemplate
这里引用别人, 用来自己回忆 https://blog.csdn.net/jack_shuai/article/details/91986690 https://www.cnblogs.com/mox ...
- mybatis中必须使用@param注解的四种情况
一.方法有多个参数 例如: 接口方法: @Mapper public interface UserMapper { Integer insert(@Param("username" ...
- C++ QT安装教程2021
第一步 去官网下载 https://download.qt.io/archive/qt/ 第二步 next 然后 我是注册的账号 注意密码的格式,要求至少7位,包含大小写字母和数字 第三步 点击下一步 ...
- 重新整理 .net core 实践篇—————路由和终结点[二十三]
前言 简单整理一下路由和终节点. 正文 路由方式主要有两种: 1.路由模板方式 2.RouteAttribute 方式 路由约束: 1.类型约束 2.范围约束 3.正则表达式 4.是否必选 5.自定义 ...
- ld-linux-x86-64消耗大量的CPU
1.现象: 服务器CPU使用率很高 top查看cpu使用进程: 2.进程用户是oracle,根据spid查看是否是数据库进程,经过查询发现:不是数据库内部的进程 select a.sql_id,a.s ...
- Python分析44130条用户观影数据,挖掘用户与电影之间的隐藏信息!
01.前言 很多电影也上映,看电影前很多人都喜欢去 『豆瓣』 看影评,所以我爬取44130条 『豆瓣』 的用户观影数据,分析用户之间的关系,电影之间的联系,以及用户和电影之间的隐藏关系. 02.爬取观 ...
- VueX理解
什么是Vuex? 官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 个人理解:Vue ...
- 43、uniq命令
相邻去重 uniq -c 表示相邻去重并统计: 1.uniq介绍: uniq是对指定的ascii文件或标准输入进行唯一性检查,以判断文本文件中重复出现的行,常用于系统排查及日志分析: 2.命令格式: ...
- 『无为则无心』Python序列 — 22、Python集合及其常用操作
目录 1.Python集合特点 2.Python集合的创建 3.操作集合常用API (1)增加数据 @1.add()方法 @2.update()方法 (2)删除数据 @1.remove()方法 @2. ...