要点综述
本应用注释即将讨论的是Dialogic之通信服务框架(CSF)的一个新组件。CSF是一个开放源代码软件套件,可以帮助开发商更轻松地开发支持Dialogic® NetStructure®板卡的高级应用和Dialogic® NetStructure®主机媒体处理(HMP)软件。CSF为开发商提供了一个高级的、面向对象的界面,该界面将大部分本地接口进行了抽象,可以便于迅速展开分布式电信应用的开发工作。
可扩展标记语言(XML)是一种广泛被接受的编码标准,主要用于编写文本文件结构化信息的代码。我们建议您使用支持CSF的Xerces开放源代码XML域对象模式(DOM)解析器,它可以帮助您极其轻松地完成许多任务。如操作本地配置文件,或者解译来自web服务器、影响到通信应用操作的XML数据。
本应用注释将就CSF和解析器之间的接口进行详细说明,以提供运行Xerces XML演示程序的方法。
目录
带有Service Pack 4的Microsoft Windows* 2000 Professional
带有Service Pack 5的Microsoft Visual C++ 6.0
Xerces C++,2.6.0版
面向Windows的Dialogic® Dialogic® System Release 6.0 PCI或面向Windows的DialogicNetStructure 主机媒体处理(HMP)软件Release 1.2 Feature Pack 1。使用SR 6.0 PCI时不需要使用电话硬件,因为此处描述的Xerces演示应用不涉及到电话技术。
操作系统为Linux*时: - Red Hat* Enterprise Linux 3.0 update 1
- Xerces C++,2.6.0版
- 面向Linux的DialogicNetStructure 主机媒体处理(HMP)软件Release 1.2。
Xerces DOM解析器类 类层次结构 Xerces DOM解析器对象的类层次结构非常类似于其它CSF电话网络、数据通信或语音设备。抽象的DOM解析器设备包括实施任何类似解析器的有用状态信息和基本数据及方法。具体的XercesDOMParser类出自于抽象类,并提供了针对特定Xerces解析器的具体方法和数据。其它类似的DOM解析器如果添加到CSF,也可以基于同样的抽象类进行构建。图1详细描述了该类层次结构。
解析器状态 Xerces DOM解析器是CSF中的一个有状态的实体,非常类似于通信或语音设备。相对而言,它更为简单,因为它不是异步的。所以它的状态种类更少。例如,它不需"正在进行"状态。此外,由于本身是同步的,所以它也不需使用CSF命令对象。命令对象与异步命令搭配使用时可发挥出色的运行效果,但是除非应用逻辑完全受同一队列的事件/命令的驱使,否则很容易出现顺序问题。这样就有可能需要为同步命令如Xerces解析创建一个完成事件(completion event)。而且如果要为CSF添加其它采用异步模式的XML解析器,那么可能也会出现上述结果。所以这个时候,我们采取了相对简单的同步方法。
图2表示的是解析器的状态机制。其运转过程具体如下。
- 首先创建解析器对象,此时对象为未初始化状态。经过Xerces XML4C子系统的初始化,对象进入可用状态。
- 然后初始化DOM解析器,指定错误处理程序,配置验证模式,此时进入打开状态。
- 此时对象就可以解析XML文件了。完成一个同步解析操作,就可以创建出一个表示XML文件的分层DOM树结构。在解析过程中,将自动执行XML语法检查。如果文件存在语法问题,解析操作就将会被中止,以排除该语法错误。Xerces还会将详细的错误信息记录在CSF事件日志上。
图2. Xerces DOM解析器的状态机制
![](//image109.360doc.cn/DownloadImg/2018/02/2420/125453075_2_20180224085011633.gif)
进入已解析状态后,就可以通过应用指定的方法遍历DOM树结构,然后收集相关数据并转移至某个存储地点,以便应用以后使用。
完成DOM树结构扫描后,即可发布扫描结果,解析器对象返回打开状态,以便进行另外的XML解析。
解析器池化 Xerces DOM解析器是CSF池化对象。CPoolObj类是一个C++模板,可以将对象存放在可扩展对象池中,这些对象都已经过初始化、可以随时使用。当使用GetAvailable()方法向池请求一个对象时,会首先搜索一个对象的向量以查找是否有未使用的条目。如果找到,对象就会被返回。否则就将创建新的对象。当不再需要对象时,就可以通过Release()方法将其返回池中,以供日后使用。这样可以节省运行时期间删除和初始化对象的成本。
池化运算还须考虑到对象的状态变化。每个新对象被创建后,它必定会进入打开状态。对象释放后,又必定会回到打开状态。最后,当应用被关闭后,池还需要清空,池中的对象也必须全部删除。
数据采集类 XML文件完成解析后,会有两个数据收集类来遍历DOM树结构,以提取所需要的数据。
第一组类仅仅概况性地表述STL容器――列表――即用来存储已解析数据的容器。具体的容器类源自于抽象的基础类。
AparsedValueContainer类没有数据和方法。它仅用于配合收集程序类的运行。(见图3。)抽象收集程序类纯虚拟功能CollectValues()的第二个影响因素是容器,当在具体收集程序类实施中定义了容器时,必须使用通用的基础类。所以在真正使用容器之前,必须在每个具体的收集程序类中进行向下类型转换。
该演示使用了两个不同的对象列表。其中一张列表的内容是一些描述SIP URL(SIP地址)的字符串。另一张列表的内容则是一些描述一组组相关CSF配置信息的对象。
对STL容器列表的访问还将受到Boost范围锁的保护。测试程序只是顺序访问每个列表――在收集程序类中添加数据,然后等列表构建完成后,在列表上循环记录变量值。但是其它未来的使用方法或许能够并发访问列表。因此锁的使用十分必要。
第二个必要的类是收集程序类。它源自于抽象类,不过这些抽象类仅用于命名纯虚拟方法CollectValues,每个具体的类中均必须有这一命名。图4表示的是测试应用中所使用的收集程序类。
![](//image109.360doc.cn/DownloadImg/2018/02/2420/125453075_4_20180224085011961.gif)
具体类中的CollectValues方法负责定义每个具体XML文件图解的DOM树遍历。它们都知道每个XML文件中找到的DOM组件与属性的名称,以及存放变量值所需要的STL容器类。通过递归呼叫(recursive call)的使用,它们可以遍历DOM树结构并传输Xerces方法返回的属性,然后存储至容器。
例如,我们可以看这样一段XML文件:
它由三个要素组成――CSFConfig、CONFDEVICES和ConfDevEntry。前两个要素只用于为解析和数据收集过程中的每个ConfDevEntry提供环境。CONFDEVICES要素用于确定值所驻留的STL容器,容器(CONFDEVICELIST)的每个节点都包含一个对象,对象的成员变量名称类似于XML文件中的属性名称――如ConfType、ConfDevice、Info1等等。成员变量的值将为属性的值――DCB、dcbB1D1、及空值。
现在我们已经了解了从XML到应用指定数据容器的整个过程,但读者在将Xerces DOM解析器类用于自己的XML文件上时,还须注意一点。
对于任何新的XML文件定义,只需要编写一个描述容器类的对象即可,然后再编写一个具体的类,以接收从已解析DOM树结构传输的数据。
在定义一个新XML图解时,我们建议首先使用Mozilla*或Microsoft Internet Explorer*等网络浏览器检查一下文件的语法。浏览器能够以更清晰的视图显示文件的语法,而且更重要的是,浏览器还可以提供语法错误讯息,并在XML文件中相应的地方指示出来。
解析器测试应用 基本Xerces解析器和数据收集程序类还带有一个测试应用样本。它能够执行两类XML文件测试。第一个是对两个不同XML文件进行单线程、重复解析。它将验证和解析XML文件的语法,并将结果传输至应用定义的STL容器。然后再使用CSF的日志系统显示容器的组成内容。
第二个测试是多线程的解析器负载测试。应用将启动四个线程。然后这些线程再初始化多个解析器,以便同时通过相同的解析顺序进行解析。这样可以验证多个解析器是否可以同时在同一个系统上使用,以及负载测试的实用性。当延期运行时,负载测试也可以用于检查是否存在内存或其它系统资源泄漏。
如果测试应用在多线程模式中运行,则有必要将CSF日志级别下降到ERROR。在完全DEBUG级别上运行会产生大量日志输出,事件日志线程和应用控制台窗口也不能与解析器保持同步。提高内存容量可以缓冲需要记录的数据。在运行应用前,应该在CSF Xerces目录中的log4cplus.properties文件中进行上述调整。
代码样本的系统安装、构建和执行 Xerces安装 Xerces XML解析器可以同时在Windows和Linux操作系统中和CSF配合使用。
Windows操作系统 在Windows下,以二进制格式安装Xerces C++发行版的操作极其简易。该版本名为"Windows NT 4.0 SP5 compiled with MSVC 6.0 SP3.zip archive",您可以从本注释曾使用的文件中获得:http://www.apache.org/dist/xml/xerces-c/binaries/ WinNT_msvc60/xerces-c_2_6_0-windows_nt-msvc_60.zip。您也可以同时获得Xerces-C的源代码。
解压缩该二进制发行版本至某个目录即可。
Linux操作系统 从源代码安装Xerces必须在Linux操作系统下才可完成。您可以访问Xerces网站(http://xml.apache.org/xerces-c/),进入"当前发布的Xerces-C源代码",下载文件xerces-c-current.tar.gz。2004年12月份之后的版本是2.6.0。此版本已经过面向Linux的DialogicNetStructure
主机媒体处理软件1.2版的测试,测试操作系统为Red Hat Enterprise Linux 3.0,Update 1。该网站还提供Xerces Linux二进制发行版,但是最好不要使用,因为它是根据Red Hat Linux 8.0开发的。
解压缩该发行版至某个目录:
tar xvfz xerces-c-current.tar.gz
设置下列环境变量:
XERCESCROOT=
export XERCESCROOT
在XERCESCROOT下的构建目录src/xercesc处输入:
runConfigure -p linux
gmake
这样将在$XERCESCROOT/lib目录下生成2个动态库文件,libxerces-c.so.26.0和libxerces-depdom.so.26.0。
构建Xerces DOM解析器应用
此处不介绍完整的CSF系统设置。如欲了解详细信息,请参见"如欲了解更多信息"部分中的CSF参考(第6页)。使用Xerces时无需考虑特别的事项,仅完成安装Xerces软件安装即可。如果要同时使用CSF,您必须从Source Forge上CSF项目处下载CSF 0.7.0或更高版本。该项目的网址为:http://sourceforge.net/projects/ commsvcfw/。
无论是哪种操作系统,在构建应用之前,您需要在Xerces目录下的CDomParserObjApp.h头文件顶部的几个#define进行设置。
- #define FULL_解析器_LOAD_TEST――(Boolean)如果已经定义,则在运行应用时需要进行多线程负载测试。如果没有定义,将进行单线程测试。切记需要根据所运行的测试调整CSF日志级别。("解析器测试应用"部分中有详细介绍,第4页。)
- #define SIP_URI_TEST_FILE――(URL或文件规范)第一次测试的XML文件的位置。测试文件(SipUri1-3.xml)位于Xerces应用目录。如果XML文件由web服务器提供,则应该给出文件的完整URL。
- #define CSF_CONFIG_TEST_FILE――(URL或文件规范)第二次测试的XML文件的位置。测试文件(CSFConfig.xml)位于Xerces应用目录。如果XML文件由web服务器提供,则应该给出文件的完整URL。
Windows操作系统
如欲同时使用CSF,您必须设置3个环境变量:XERCES_ROOT、XERCES_INCLUDE和XERCES_LIB。通常的值为
XERCES_ROOT=C:\xerces-c_2_6_0-windows_
nt-msvc_60
XERCES_INCLUDE=%XERCES_ROOT\include
XERCES_LIB=%XERCES_ROOT%\lib
Pathenvironment变量必须包含%XERCES_ROOT%\bin。
完成以上参数设置之后,Visual C++ CSF/Xerces解析器测试应用项目就将能够定位Xerces组件。
Visual C++ 6.0用于构建CSF和解析器测试应用。该项目可被包含于整体CSF工作空间,该项目本身(Dom解析器Obj.dsp)也可以与Visual C++同时运行。
Linux操作系统
如欲同时使用CSF,您需要设置几个环境变量。首先,将XERCES_ROOT设置为完全路径,直通顶层Xerces目录。(这与用于构建Xerces库本身的XERCESCROOT的值相同。)例如:
XERCES_ROOT=/usr/local/xerces-c-src_2_6_0
export XERCES_ROOT
由于Xerces是一个动态(共享对象)库,因此环境变量LD_LIBRARY_PATH必须包括$XERCES_ROOT/lib。通常设置如下:
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:
${XERCES_ROOT}/lib
export LD_LIBRARY_PATH
运行Xerces应用中的makefile就可构建解析器测试应用。
运行应用
DomParserObj应用完成构建之后,它就可以在任何操作系统的命令行处开始运行。
您可以在终端窗口中看到调试或错误日志信息,这些信息的位置为CSF Xerces目录下的test.log文件。您可以看到XML文件每个重要要素的属性名称和值。
同时按Ctrl键和C键可以按顺序关闭DomParserObj。
其它开发商服务
Applied Telecom Solutions Center创建的所有解决方案均为完整的应用,但是如上所述,在Dialogic产品未深入的其它领域,它们也未曾有深入的发展。尽管如此,Dialogic也可以在这些领域助您一臂之力。请联系您的销售团队或渠道成员,或者致电1-973-993-3030获取其它专业资源。Applied Telecom Solutions Center创建的解决方案可作为完整应用的典范。您可以提供关于电话组件的详细信息,以及关于其它关键解决方案应用组件的概要信息。通过http://www.Dialogic.com/上的开发商资源,以及http://www.Dialogic.com/上的Dialogic通信联盟成员优势,Dialogic同样可以在这些领域助您一臂之力。
术语缩写
CSF 通信服务框架
DOM 域对象模式
HMP 主机媒体处理
SAX XML的简单API
SIP 会话初始化协议
STL 标准模板库
URI 统一资源标识符
VXML 语音可扩展标记语言
XML 可扩展标记语言
了解更多信息
通信服务框架源代码
http://sourceforge.net/projects/commsvcfw
应用注释:通信服务框架(CSF)介绍
http://www.Dialogic.com/network/csp/applnots/8989an.htm
应用注释:通信服务框架的基本原理(第2版)
http://www.Dialogic.com/network/csp/applnots/9333.htm
Xerces C++解析器网站
http://xml.apache.org/xerces-c/
如欲了解更多信息,请访问Dialogic网站http://www.Dialogic.com。
融合通信专栏>>应用>>