`
zhuyuanxiang
  • 浏览: 130608 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Apusic对XML文件处理之分析(转-请作者与我联系)

阅读更多

1                前言

本文阐述了 Apusic XML 文件处理的详细分析,及其现有情况下 Apusic XML 文件解析存在的问题。

2                Apusic 如何处理 XML 文件

Apusic 服务器对于 XML 文件解析应该分为两种情况:一种 Apusic 需要加载的 XML 文件。如 :Apusic 的配置文件, J2EE 应用的 web.xml,application.xml 文件等。另外一种是用户代码中使用 DocumentBuilderFactory SAXParserFactory 来解析自己的 XML 文件。对于上面两种情况的 XML 文件, Apusic 是予以不同处理的。以下对此做具体说明。

2.1      解析 Apusic 的配置文件及其 J2EE 应用的 web.xml,application.xml…etc

对于这一块的解析,我们现在是采用自己的 XML 解析器来实现的,我们自己的 XML 解析器就是 com.apusic.xml.parsers com.apusic.xml.reader 下的相关类来处理的,和朱华明讨论过,我们对于上述文件采用自己的解析器处理是存在优势的。因为我们对这些文件的结构很了解。效率应该会高于任何第三方的 XML 解析器。但是我们的解析器可能也会存在一些不足的地方,对于一些复杂的 XML 结构的处理可能会存在问题。由于考虑到效率问题,所以这一块应该不需要使用第三方的 XML 解析器,还是使用我们自己的解析器为好。

2.2      用户代码中解析自己的 XML 文件

用户应用程序使用 DocumentBuilderFactory, SAXParserFactory 对自己的 XML 解析时,由于我们在 Apusic.jar 中,对 META-INF/service/ 文件夹下设置了 javax.xml.parsers.DocumentBuilderFactory , javax.xml.parsers.SAXParserFactory 两个属性的值,并指向了 Xerces, 所以用户在解析 XML 时,缺省情况下使用的就是 Xerces API 进行操作的。因此这一块应该是不会存在问题。

至于设置此属性后是如何利用 Xerces API 进行解析 XML 的原理,当你阅读了 Java 相关源代码后就可以明白。具体可以阅读 javax.xml.parsers 包下的 DocumentBuilderFactory.class,SAXParserFactory.class 类的 newInstance 方法。

3                现存问题分析

现在我们会遇到修改 Apusic 配置文件后, Apusic 无法启动的情况。这种情况主要是因为我们使用了自己的 XML 解析器。而我们的解析器在处理 UTF-8 编码文件时存在问题,因为文本文件在文件的头部存在 BOM  (Byte Order Mark) 标识 , 而这个 BOM 标识是用来表示文件的字节顺序。对于不同编码格式的文件存在不同的 BOM 标识 , 文件的 BOM 标识规范可以参考下表(表 1 ),由于 UTF-8 文件不存在字节顺序的问题,所以这个文件 BOM 标识在 UTF-8 编码方式下是可有可无的。而当我们修改配置文件并保存后,如果存在 BOM 标识,我们的解析器就会出错,不存在 BOM 标识时,我们的解析器就能够正确工作。所以我们需要在解析 UTF-8 的时候,判断头部是否包含 UTF-8 BOM 标识,如果有就需要跳过去。代码修改主要是在 XmlReader.java 文件中做如下处理:

//skip UTF-8 BOM (byte order mark)

if (count >= 3 && pos == 0){

if (buffer[0] == (byte)0xEF &&

buffer[1] == (byte)0xBB &&

buffer[2] == (byte)0xBF){

pos += 3;

}

}

<!----> <o:p>   </o:p>

UTF-8

EF BB BF

UTF-16 Big Endian

FE FF

UTF-16 Little Endian

FF FE

UTF-32 Big Endian

00 00 FE FF

UTF-32 Little Endian

FF FE 00 00

<o:p>   </o:p>

( 1)

<o:p>   </o:p>

为什么我们对 UTF-16,UTF-32 等编码方式文件存在 BOM 标识时没有问题呢?其实这个问题应该是 Java 的一个 bug Java 的文本流在处理其他编码方式的时候能够很好的处理这个 BOM 标识,但是对于 UTF-8 编码时不能够正确处理。该 bug 可以参考以下地址:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058

<o:p>   </o:p>

分享到:
评论

相关推荐

    Apusic--license

    金蝶中间件(Apusic)--license

    Apusic AS的Web应用中调用commons-logging的流程

    在Apusic AS(一个基于Java的企业级应用服务器)中,调用commons-logging进行日志处理是一个重要的实践。本篇将深入探讨Apusic AS如何利用commons-logging来实现日志功能,以及相关知识点。 首先,理解commons-...

    Apusic服务器解决数据源的资源引用

    这一步通常是在应用级别的配置文件中完成的,例如`META-INF/apusic-application.xml`。在这个文件中,使用`resource-ref`元素将资源引用名称与数据源的JNDI名称关联起来。 ```xml &lt;resource-ref&gt; &lt;res-ref-name&gt;...

    Apusic密码修改指引

    - 删除前请先做好文件备份。 #### 四、木马攻击排查手工方法 **背景介绍:** 随着网络安全威胁日益增多,定期进行木马攻击排查是保障系统安全的重要措施之一。 **排查方法:** 1. **检查`apusic/domians/*/...

    金蝶中间件Apusic-plugins.zip

    金蝶中间件Apusic-plugins.zip是一个包含了一系列与金蝶Apusic中间件相关的开发插件的压缩包,主要用于帮助开发者在Eclipse或MyEclipse环境中进行应用程序的调试和开发。Apusic中间件是金蝶公司推出的一款企业级应用...

    管理Apusic Web服务器

    Apusic Web 服务器是 Apusic 应用服务器中内置的一个高效、安全、可靠的 Web 服务器,提供完整的 Web 服务器的功能,使 Apusic 应用服务器在提供对静态页面和图形的同时,提供对 JSP、Servlet 的高效服务。Apusic ...

    apusic数据库连接攻略

    apusic数据库连接攻略是apusic文件中的一种数据库连接策略,apusic是一个国产中间件,由金蝶中国开发。该攻略主要用于在apusic文件中配置数据库连接,以便在应用程序中使用数据库资源。 1. 配置数据源 在apusic...

    AAS-V10.zip

    标题"AAS-V10.zip"和描述中的"apusic"关键词指向了Apusic应用服务器,这是一款由中国万网(现阿里云)开发的企业级Java应用服务器,它为各种企业应用程序提供了一个运行平台。Apusic应用服务器遵循Java EE(以前称为...

    金蝶中间件Apusic Eclipse/MyEclipse插件 all-plugins

    首先,金蝶中间件Apusic是企业级的应用服务器,它提供了稳定、安全的运行平台,支持Java EE标准,可以处理大规模的企业级应用。Apusic插件则将这种强大的中间件功能与流行的开源IDE——Eclipse和MyEclipse进行了无缝...

    Apusic SQLServer的调优记录

    在应对并发压力大、遭受网络攻击以及数据库压力大的情况下,对HP-UX + JDK + Apusic + SQL Server环境进行调优至关重要。在这种环境中,系统需要处理3000至8000并发连接,未来可能高达20,000人同时在线,同时还要...

    基于Java与Shell语言的apusic-sbom-tool设计源码

    项目包含39个文件,其中Java源文件17个,XML配置文件7个,Shell脚本5个,JAR包文件5个,以及少量Markdown、Git忽略、Idea项目文件和许可证文件。该工具通过整合源码仓库、代码指纹、构建环境、制品信息、内容与依赖...

    ApusicServer v8.0的2014年开发版License

    2. **安装License**:将`license.xml`文件放置到Apusic Server的指定目录,或者通过配置工具进行导入。 3. **验证License**:启动服务器时,系统会读取并验证`license.xml`中的信息,确保软件的合法使用。 4. **监控...

    ApusicServer 2013年开发版License

    综上所述,"ApusicServer 2013年开发版License" 主要涉及Apusic Server 的开发版使用许可,包含源代码和特定的XML格式许可证文件,对开发者而言,它不仅关乎软件的合法使用,还可能涉及到开发和定制的过程。

    Windows2003+Apusic6.0安装部署手册

    Windows2003+Apusic6.0安装部署手册 本手册旨在指导用户在 Windows 2003 操作系统上安装和部署 Apusic 6.0,旨在帮助用户快速掌握安装和配置 Apusic 6.0 的步骤。 一、安装准备 在开始安装 Apusic 6.0 之前,需要...

    金蝶王学军---基于Apusic的SOA解决方案

    【金蝶王学军---基于Apusic的SOA解决方案】主要介绍了金蝶公司采用Apusic中间件构建的面向服务架构(Service-Oriented Architecture,简称SOA)的解决方案,该方案旨在解决企业在面对日益复杂和多变的业务需求时,...

    Apusic OperaMasks-jsfdemo

    Apusic OperaMasks很全的JSF的例子,什么都有,如:TREE 、GRID、FORM、BOX、MENU、DIALOG、AJAX。都很漂亮的。

    使用Jprofiler监控Apusic应用服务器.pdf

    本文聚焦于如何运用JProfiler这一业界公认的高性能监控与分析工具,对Apusic应用服务器进行全面监控与优化。 #### JProfiler:性能监控领域的佼佼者 JProfiler是一款屡获殊荣的专业Java性能监控与分析工具,以其...

    金蝶Apusic V10 应用服务器用户管理手册

    Apusic应用服务器的用户管理是其核心功能之一,它允许创建、管理不同的用户和角色,以实现权限控制和安全管理。用户可以设置不同级别的访问权限,如管理员、开发者和普通用户,以满足不同团队成员的需求。同时,...

Global site tag (gtag.js) - Google Analytics