ONVIF/gSoap依赖关系及问题

  1. ONVIF是一组服务规范,标准參考
  2. gSoap是一套基于实现SOAP通信接口的工具链

即是,当我们须要訪问ONVIF的Web Service或实现对ONVIF部分的支持;基于C/C++开发,则须要借助gSoap生成这之间的交互接口调用的代码。

gSoap生成代码

  • wsdl2h

将服务接口描写叙述转换为soapcpp2的转换规则,生成中间头文件。

通常我们前期会选择实现部分服务标准;因此这期间生成的兴许多为改动这次生成中间产物.h,而不会一切又一次生成。

  • soapcpp2

这次是将中间定义转换为实现代码,以供C/C++使用;基本上此过程生成的产物不作特殊处理。由于生成体积庞大,不利于维护改动;而尽量查问题是查找源头或开发逻辑。

ONVIF开发遇到问题

在ONVIF开发过程中最先最常会遇到的问题就是

  1. 调用失败,解析出错
  2. 遇到soap_dom_element类型

以下就着重看看这两类问题的有效处理方式。

规避服务实际扩展带来的解析报错

针对第一个问题,大部分这类问题都说明服务响应的结构不规范,导致解析失败。(比方我遇到的就是雄迈的IPC,在ODT測试GetCapabilities时失败)

通常服务提供商基本服务是可以保证的,问题主要会出如今其扩展结构中。这就是ONVIF标准定义的xsd__anyType

扩展结构当然一般都是可选字段,此时我们忽略不使用就可以(仅仅要不影响我们应用需求),观看gsoap生成代码以及终于改动实践我发现,可选字段我们能够选择忽略,这样恰好就规避掉了这情况带来的解析报错,往往一个调用引发的错误,是会导致应用逻辑的决策。

忽略操作,这时候我须要将soapcpp2中间规则的.h中找到对应结构描写叙述的地方,细致查看该字段假设是Optional,则凝视忽略掉便是。又一次用soapcpp2工具处理生成新的代码完毕。

将 xsd__anyType改动成指定解析结构

对于这个,最常见的就是我们要处理ONVIF对于Event通知的时候,默认生成的都是soap_dom_element这类型结构,假设类型复杂,我们会非常难为,须要好深层的遍历实属刁难。但好在对于Event这类实现也是根据规范来实现的,基本填充的内容都标准结构类型。因此我们仅仅要解析出对应的结构信息就能够方便我程序开发使用。

此处參考ONVIF Event消息解析

总之,这样一来我们将更方便更好的使用gsoap协助我们的开发工作,估计下一篇内容会往使用gsoap手动序列化,从而突破仅仅用工具生成庞大量代码。由于生成代码都是规则化可视的,假设窥得当中要领,则很有利于我们简化依赖和为生成代码瘦身。这对于程序发行使用是很有利的。

使用gSoap规避和改动ONVIF标准类型结构的解析的更多相关文章

  1. 使用gSoap规避和修改ONVIF标准类型结构的解析

    ONVIF/gSoap依赖关系及问题 ONVIF是一组服务规范,标准参考 gSoap是一套基于实现SOAP通信接口的工具链 即是,当我们需要访问ONVIF的Web Service或实现对ONVIF部分 ...

  2. 标准类型String(学习中)

    1.读取string对象 #include<iostream> #include<cstring> using namespace std; int main() { stri ...

  3. 标准类型内建函数 cmp()介绍

    内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0.它的行 ...

  4. day2_python学习笔记_chapter4_标准类型和内建函数

    1. 标准类型 Integer,Boolean, Long integer, Floating point real number, Complex number, String, List, Tup ...

  5. python基础----isinstance(obj,cls)和issubclass(sub,super)、反射、__setattr__,__delattr__,__getattr__、二次加工标准类型(包装)

    一.isinstance(obj,cls)和issubclass(sub,super)                                isinstance(obj,cls)检查是否ob ...

  6. python基础之类的内置__setattr__,__delattr__,__getattr__和 二次加工标准类型(包装)

    一.内置attr:__setattr__,__delattr__,__getattr__ __setattr__ #添加/修改属性会触发它的执行 __delattr__ #删除属性的时候会触发 __g ...

  7. Effective JavaScript Item 40 避免继承标准类型

    本系列作为Effective JavaScript的读书笔记. ECMAScript标准库不大.可是提供了一些重要的类型如Array,Function和Date.在一些场合下.你或许会考虑继承当中的某 ...

  8. Python学习15之python内置六大标准类型

    1.六大标准类型:数值型,str,list,set,tuple,dic 2.数值型:int,float,bool,complex 3.区别: 1)数值型和str,tuple都是不可变类型 而list, ...

  9. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

随机推荐

  1. 《c陷阱与缺陷》笔记--移位运算

    #include <stdio.h> int main(void){ int a = 2; a >> 32; a >> -1; a << 32; a & ...

  2. Jar包转成Dll的方式(带嵌套的jar也能做) (转)

    研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

  3. Linux Socket编程注意事项

    Socket API 是网络应用程序开发中实际应用的标准 API.虽然该 API 简单.可是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示怎样避免它们. 隐患 1.忽略返回状态 ...

  4. [C++]const修饰符

    Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...

  5. bootstrap css选择不同的宽度

    刚开始使用bootstrap css开源项目.遇到一个问题,默认的input 宽度太大,需要找小一点的. 其实只需要在input tag中选用预定义的较小的宽度即可.比如: <input typ ...

  6. 怎样控制界面控件之进度条(ProgressBar)功能

    一.基础知识: 1.ProgressBar在界面文件XML中的布局: [html] <progressBar android:id="@+id/progressbar_updown&q ...

  7. Linux下的softlink和hardlink(转)

    Linux中包括两种链接:硬链接(hard link)和软链接(soft link),软链接又称为符号链接(symbolic link) 创建命令:ln -s destfile/directory s ...

  8. CCEditBox/CCEditBoxImplIOS

    #ifndef __CCEditBoxIMPLIOS_H__ #define __CCEditBoxIMPLIOS_H__ #include "cocos2d.h" #if (CC ...

  9. HDU 3699 A hard Aoshu Problem (暴力搜索)

    题意:题意:给你3个字符串s1,s2,s3;要求对三个字符串中的字符赋值(同样的字符串进行同样的数字替换), 替换后的三个数进行四则运算要满足左边等于右边.求有几种解法. Sample Input 2 ...

  10. JavaScript发展史,与JScript差别,引入方式,数据类型,命名规范,命名推荐,解决命名冲突

    文件夹: 1.JavaScript发展史 2.JavaScript与JScript差别 3.JavaScript引入方式 4.JavaScript基本数据类型及布尔值 5.JavaScript命名规范 ...