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 ...
随机推荐
- GitHub标星125k!阿里技术官用3个月总结出的24万字Java面试笔记
最近收到一位粉丝的回馈! 这位粉丝已经成功入职阿里了小编很是羡慕啊! 今天就把这份30w字Java面试笔记给大家分享出来,说来也巧这份资料也是由一位阿里技术官整理出来的这算不算是"搬起石头砸 ...
- 菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的 ...
- ApplicationListener接口,在spring容器初始化后执行的方法
一.如果我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,那么就可以使用ApplicationListener接口,实现ApplicationListener接口中的onAppl ...
- Luatools v2烧录教程(适用于2G、4G Cat.1、4G Cat.4模块)
目录,可以根据需要直接点击跳转: 下载LuaTools工具 2G模块烧写教程(Air2xx系列.Air8xx系列) 连接模块 刷入AT版本的lod 刷入任意的lod固件 下载lua脚本文件 [4G 模 ...
- 学习JDK源码(二):Integer
最近没有好好保持学习的好习惯,该打. 天天忙,感觉都不知道在干嘛.真的厌倦了普通的Java代码,还是想学点新技术. 用了这么久的Java,最常用的数据类型肯定是Int了,而他的包装类Integer用的 ...
- Unity3D学习笔记1——绘制一个三角形
目录 1. 绪论 2. 概述 3. 详论 3.1. 准备 3.2. 实现 3.3. 解析 3.3.1. 场景树对象 3.3.2. 绘制方法 4. 结果 1. 绪论 最近想学习一下Unity3d,无奈发 ...
- ZooKeeper集群解析
ZooKeeper集群解析. 这篇文章中来介绍一下 ZooKeeper 相关的集群角色,还有 ZAB协议,集群的安装在 ZooKeeper入门 中有介绍. 一.ZooKeeper集群中的角色 Lead ...
- testt
一级标题 二级标题 三级标题 四级标题 l 1
- VS 2017 RC .net core ef+ MySql 出现错误
在di注入时会出现错误 MySql.Data.EntityFrameworkCore.Storage.Internal.MySQLCommandBuilderFactory..ctor(ISensit ...
- 7.4、Horizon部署
1.horizon介绍: horizon只需要连上keystone即可: 这里在控制节点controller进行操作: 提示:horizon和keystone运行时使用的都是apache软件,如果都装 ...