zoukankan      html  css  js  c++  java
  • 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);
        }
    

    亲测有效

  • 相关阅读:
    jenkins免密添加SSH Servers
    Workman启动失败的解决方法 stream_socket_server() has been disabled for security reasons
    jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed
    mac OS配置用户全局环境变量(设置字符集为UTF8)
    使用 Application Loader提交IPA文件到苹果市场
    IOS使用批处理打包
    Java进阶知识24 Spring对JDBC的支持
    Java进阶知识23 Spring execution 切入点表达式
    Java进阶知识22 Spring的AOP编程
    Java进阶知识21 Spring的代理模式
  • 原文地址:https://www.cnblogs.com/jiangwang001/p/13735384.html
Copyright © 2011-2022 走看看