接口名称:

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++中的结构体)的更多相关文章

  1. Java调用IIS发布的WebService

    之前的一篇博客说了一个实例,就是用VS2005在IIS上发布WebService.今天我们来实现在Eclipse上用Java来调用昨天发布的WebService. 首先咋在浏览器中输入http://1 ...

  2. Java利用Axis远程调用WebService接口

    准备工作: 主要依赖的包: 1.axis.jar 官网:http://axis.apache.org/axis/ 2.jaxrpc.jar 下载地址:http://www.java2s.com/Cod ...

  3. 使用soapUI5.3.0调试webservice接口(参数为XML格式)

    最近项目中经常要调试webservice接口,从朋友处了解到他们经常使用SoapUI,因此学习一下这个工具的使用,为避免遗忘,特地记录下来,分享分享... 下载 #####首先,下载SoapUI,我下 ...

  4. [PHP] PHP服务器接口SAPI中的结构体

    SAPI:在各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口.例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等 1.结构体:使用结构体(Struc ...

  5. 六、golang中的结构体和方法、接口

    结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...

  6. java调用peoplesoft提供的webservice接口

    使用到了soapui,apache-cxf,eclipse 1.使用soapui测试提供的地址有效性(如果没有soapui也可以直接在cmd命令行中使用wsdl2java命令生成客户端代码) wsdl ...

  7. STL set接口中使用结构体类型

    需要在结构体中重载'<'运算符,下面是我写的一个例子: #include<iostream> #include<set> using namespace std; str ...

  8. java调用 C# webservice接口

    java调用webservice接口方式有多种,本人很懒,测试一种满足我的需求,故为试验其他方法,仅供参考 一:工具 MyEclipse,C#编码发布的webservice接口 二:步骤 1.打开my ...

  9. webservice接口的开发和调用

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

随机推荐

  1. python_selenium_PO模式下显示等待、隐式等待封装,结合Excel读取元素可取默认等待时间配置

    basepage中等待的封装 def implicitly_wait(self): self.driver.implicitly_wait(5)def wait(self): time.sleep(5 ...

  2. python-selenium 引入包或者类的清晰写法

    #cording=gbk#一般最上面放系统自带的包或者类import os import time##第二层放第三方下载的包或者类from selenium import webdriverfrom ...

  3. Android 小知识点笔记

    获取 view 的位置 View.getLocationInWindow(int[] location) 一个控件在其父窗口中的坐标位置 View.getLocationOnScreen(int[] ...

  4. vue3.0 props

    .orange { color: rgba(255, 165, 0, 1) } Vue3.0 props 1.你是否遇到了,引用props数据报错的问题? 在Vue3.0中,采用了proxy,让很多数 ...

  5. UF_CSYS 坐标系操作

    Open C   UF_CSYS_ask_csys_info               获取WCS坐标系的原点坐标和矩阵标识UF_CSYS_ask_matrix_of_object    获得对象 ...

  6. 【NX二次开发】大开眼界,DLL还可以这么调!

    NX二次开发应用程序有交互式.批处理和远程3中模式.交互模式的应用程序(.dll)在NX界面环境下运行.dll以动态链接库的方式被加载到NX的进程空间中.dll可以通过下列几种方式执行. 1.直接激活 ...

  7. 【NX二次开发】Block UI NXOpen::BlockStyler::BlockDialog

    定义: NXOpen::BlockStyler::BlockDialog* theDialog; theDialog->PerformApply();//执行应用并重新启动对话框. theDia ...

  8. VBS脚本编程(2)——运算符

    算数运算符 用于执行数学计算的运算符. 1.加法运算符( + ) 计算两个数之和. 2.减法运算符( - ) 计算两个数值的差或表示数值表达式的负值. 3.乘法运算符(*) 计算两个数之积. 4.除法 ...

  9. 微信小程序电子签名实现

    实现签名方法就是使用canvas <canvas canvas-id="firstCanvas" id='firstCanvas' bindtouchstart=" ...

  10. 7、解决windows10家庭版无法远程连接服务器的问题

    (1)方法一: 升级windows10为专业版,因为win10家庭版没有组策略: (2)方法二:通过远程命令: 同时按住"win+r"键调出"运行",在方框内输 ...