`
nickxu
  • 浏览: 7007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

XML api折射出sun与IBM的恩仇

阅读更多
在AIX上面部署Ehcache Server,启动后出错。
Exception in thread "Thread-2" javax.xml.parsers.FactoryConfigurationError: Provider com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl not found
        at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
        at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.getSAXParser(DeploymentDescriptorFile.java:105)
        at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.read(DeploymentDescriptorFile.java:276)
        at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.read(DeploymentDescriptorFile.java:216)
        at com.sun.enterprise.web.WebDeployer.initDefaultWebXMLBundleDescriptor(WebDeployer.java:268)
        at com.sun.enterprise.web.WebDeployer.getDefaultWebXMLBundleDescriptor(WebDeployer.java:235)
        at com.sun.enterprise.web.VirtualServer.createSystemDefaultWebModuleIfNecessary(VirtualServer.java:616)
        at com.sun.enterprise.web.WebContainer.loadDefaultWebModules(WebContainer.java:1687)
        at com.sun.enterprise.web.WebContainer.postConstruct(WebContainer.java:631)
        at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:150)
        at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:90)
        at java.security.AccessController.doPrivileged(AccessController.java:197)
        at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:87)
        at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:75)
        at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
        at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
        at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
        at org.glassfish.internal.data.ContainerInfo.getContainer(ContainerInfo.java:75)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.startContainers(ApplicationLifecycle.java:687)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:327)
        at org.glassfish.embed.impl.EmbeddedApplicationLifecycle.setupContainerInfos(EmbeddedApplicationLifecycle.java:87)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:166)
        at org.glassfish.embed.Server.deploy(Server.java:616)
        at org.glassfish.embed.Server.deploy(Server.java:579)
        at org.glassfish.embed.Server.deploy(Server.java:550)
        at net.sf.ehcache.server.standalone.Server$GlassfishServerThread.startWithGlassfish(Server.java:246)
        at net.sf.ehcache.server.standalone.Server$GlassfishServerThread.run(Server.java:229)


原文地址: http://www.w3china.org/blog/more.asp?name=hongrui&id=23698
最初的xml解析器是sun的Crimson和IBM的Xerces,这两个开源项目都捐给了apache组织,后来Xerces发展很快,Crimon基本没有人使用。
1.4 版本起,用于 XML 处理的 Java API 就已经加入了Java 2 平台中。 利用该 API,可通过一系列标准的 Java 平台 API 来处理 XML 文档。
因此,也就无需另外添加 XML 处理包了。sun的JDK1.4使用Crimson,IBM的JDK使用Xerces。
如果打算把sun 的jdk程序移植到IBM的JDK下,注意解析器不同,XML处理会出问题。这就说明了java不是“一次编译,到处运行”,而是“一次编译,到处调试”。
如果你把IBM的JDK移植到SUN的JDK下,即使把Xerces包引入CLASSPATH,JDK还是使用Crimson,不信你运行java -verbose试一试。
解决的办法就是在在JRE\lib\目录下,建立一个jaxp.properties的文件,
内容如下:
    javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
    javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
就可以使用Xerces。
或者使用命令行
# Add the XML parser jars and set the JAXP factory names
# Crimson parser JAXP setup(default)
CLASSPATH=$CLASSPATH:../lib/crimson.jar
JAXP=-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
JAXP="$JAXP -Djavax.xml.parsers.SAXParserFactory=org.apache.crimson.jaxp.SAXParserFactoryImpl"

# Add the XML parser jars and set the JAXP factory names
# Xerces parser JAXP setup
CLASSPATH=$CLASSPATH:../lib/xerces.jar
JAXP=-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
JAXP="$JAXP -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl"
最终sun还是指定JAXP规范,JSR 206 Java API for XML Processing(JAXP) 1.3,他已经由JDK1.5实现。
JAXP实现了XPath,但是xalan的org.apache.xpath.XPathAPI 类已经移植到了 JRE 1.5 中,重构为com.sun.org.apache.xpath.internal.XPathAPI。
如果在以前的JDK中,使用含 XPathAPI 类的 jar,例如 xalan-2.4.1.jar。 将该 jar 加入到 CLASSPATH(类路径)。

W3C的DOM标准API非常难用,于是有人开发 Java专用的XML API,这就是jdom=java+DOM。其中一部分人,去开发dom4j,这个不是非常标准,但是速度很快。
使用JDOM隐含服务器风险,因为JBoss和Webphere都是基于JDOM开发的,在这两个服务器下使用JDOM,必须进行相应的设置,而且你的JDOM版本必须与服务器使用的相近,
因为JVM只加载一份相同的类,服务器优先加载自己使用的JDOM,你开发用的JDOM不会被加载,你的应用就会出错。
使用Dom4J隐含工程问题,主要是hibernate,如果你开发的项目和hibernate合并,Dom4J版本不兼容的话,寻找dom4j相同版本hibernate,或者你改程序适应hibernate的Dom4j。
java没有windows的DLL地狱,但是java的jar地狱有过而无不及啊。
分享到:
评论

相关推荐

    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。下载地址 .txt

    在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,...

    ibm xml java解析

    IBM Java为DOM解析提供了一套完整的API,包括`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等接口和类。 1. **创建DOM解析器**:首先,我们需要创建一个`DocumentBuilderFactory`实例,然后...

    IBM XML入门教程

    2. **XML解析**:讲解如何使用DOM(Document Object Model)、SAX(Simple API for XML)和XPath(XML Path Language)来解析XML文档。 3. **XML命名空间**:解释如何通过命名空间避免元素名的冲突,确保不同来源的...

    Sun 的 Java API for XML 语法分析

    Java API for XML Processing,简称JAXP,是Sun Microsystems推出的一种用于处理XML的Java接口,旨在为XML解析提供一种统一的、与供应商无关的访问方式。JAXP并不直接进行XML解析,而是作为一个抽象层,使得开发者...

    淘宝API的使用与XML使用

    淘宝API是淘宝开放平台提供的一系列接口,允许开发者通过这些接口与淘宝系统进行交互,实现各种功能,如商品管理、订单处理、用户信息获取等。5ufnali可能是特定的API调用标识或者一个特定的功能模块。XML...

    ibm-jar.rar

    5. **互操作性**:IBM的XMI存储可能设计为与其他建模工具或平台无缝交互,这意味着它可能包含了兼容性层和接口,以实现与其他系统(如Maven、Eclipse或IBM自家的Rational工具)的集成。 6. **性能优化**:对于大型...

    【ASP.NET编程知识】.net webapi接收xml格式数据的3种情况小结.docx

    .NET Web API 接收 XML 格式数据的 3 种情况小结 在 ASP.NET 编程中,Web API 是一个框架,可以很容易构建达成了广泛的 HTTP 服务客户端,包括浏览器和移动设备。是构建 RESTful 应用程序的理想平台的 .NET 框架。...

    Simple API for XML 2.0.x 版的使用

    IBM在线教程,教程探讨 Simple API for XML 2.0.x 版(或 SAX 2.0.x)的使用。它针对的是如下开发人员,他们理解 XML,并且希望学习这个用于操作 XML 数据的轻量级的、基于事件的 API。 这里假设读者熟悉诸如格式...

    api-versions.xml 下载使用

    \Android\Sdk\platform-tools\api\api-versions.xml

    JAXP 专述――Sun 的 Java API for XML 语法分析

    《深入解析JAXP:Sun的Java API for XML解析》 在探讨JAXP(Java API for XML Processing)这一主题时,我们需首先明确其在Java与XML领域中的定位与价值。JAXP并非旨在革新XML处理的方式,也不提供额外的语法分析...

    jakarta.xml.soap-api-1.4.2.zip

    jakarta.xml.soap-api-1.4.2.jar jakarta.xml.soap-api-1.4.2-javadoc.jar jakarta.xml.soap-api-1.4.2-sources.jar

    dom4j-XML解析.zip

    在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,...

    Java™ API for XML

    1. Java XML API:Java XML API是用于处理XML(可扩展标记语言)文件的一系列Java API。它允许Java程序读写和操纵XML数据,使得Java程序能够创建、解析、打印和修改XML文档。这些API通常被集成到Java标准版(J2SE)...

    ibm redbook xml341

    根据给定的文件信息,我们可以提炼出以下关键的IT知识点,主要聚焦于XML编程与相关技术的介绍: ### XML编程基础 #### 1. XML(Extensible Markup Language) - **定义**:XML是一种用于标记数据的语言,允许...

    javax.xml.bind jdk1.5缺包

    标题 "javax.xml.bind jdk1.5缺包" 指出的问题是在使用Java 1.5版本时,遇到了与`javax.xml.bind`相关的类找不到的异常。具体来说,异常信息 "java.lang.ClassNotFoundException: ...

    javax.rar(jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0)

    在Java开发环境中,`javax.rar`这一提及实际上与RAR压缩库无关,而是涉及到Java的XML绑定(JAXB)技术。标题中的"jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0"是JAXB的不同组件版本号,它们在处理XML到Java...

    jaxb-impl.jar jaxb-api.jar jsr173_1.0_api.jar

    `jsr173_1.0_api.jar`是Java Simple API for XML Processing (StAX) 1.0规范的API接口,它是Java中处理XML流式解析和生成的标准。JAXB有时会与StAX结合使用,特别是在处理大量XML数据时,StAX可以提供更高效的性能。...

    天气预报API城市代号.xml

    说到开发天气预报,就需要找一个开放接口了,接口有很多,不过个人觉得,中国天气网的数据比较准确,而且也有权威性。...有大神解析了中央气象台返回来的数据,并保存为XML格式,数据具体到县、区级别,供大家参考,

    解决android项目编译api-versions.xml错误问题

    下载解压,直接放入sdk/platform-tools下

    stax-api.jar

    `stax-api.jar`是Java中用于处理XML流的STAX(Streaming API for XML)的API接口库,它提供了与XML数据交互的一套标准化接口。 STAX(Streaming API for XML)是一种低级别的XML解析方法,相比DOM(Document Object...

Global site tag (gtag.js) - Google Analytics