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基础篇,By定位元素
1.By定位和find_element_by_XXXXXX是一样的,如下图所示,定位元素的方法都是一样的 2.使用By定位代码如下所示 from selenium import webdriver f ...
- JUC 并发编程--06, 阻塞队列(7种), 阻塞等待 api的 代码验证
这些队列的 api ,就是添加队列,出队列,检测对首元素, 由于 add()--remove(), offer()--poll(),太简单这里不做验证, 只验证后二组api: 阻塞等待( put()- ...
- 性能工具之stress工具使用教程(带源码说明)
stress是一个在linux下的压力测试小工具. 我看到有些人用这个工具来描述一些资源耗尽的场景,也有人用它来做混沌测试中.请使用者要注意,这个工具并不是模拟业务问题的,是模拟系统级问题的.所以 ...
- Mysql数据库值的添加、修改、删除及清空
3.MySQL数据管理 第一种方式:不太建议,看起来复杂些 -- 学生表的 gradeid 字段,要去引用 年级表的 gradeid -- 定义外键key -- 给这个外键添加约束,(执行引用),RE ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(6) : 添加LUIS,理解自然语言 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- Linux集群环境下NTP服务器时间同步
NTP介绍 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调时UTC(Universal Time ...
- 台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接
前言 台达AS系列,型号为AS322P. 物理设备连接 使用WPL Editor连接PLC 使用RS485口当作RS232口连接PLC 注意: ...
- 前台使用Vue
前台搭建遇到问题 ----前台访问量大 未采用vue 单页面SAP 的方式构建 使用多HTML构建页面 项目构建 vue 2.6 https://cn.vuejs.org/ elementUI htt ...
- 用transform和rem哪个好
个人觉得电脑端的用transform好,毕竟电脑端的项目基本都会固定屏幕比列,16:9.28:9.32:9的 一个固定的设计稿就能很好的适配. 移动端用rem比较好,移动端的屏幕比列太杂,使用rem自 ...
- Terraform状态State管理,让变更有记录
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...