当前位置: 首页 > 知识库问答 >
问题:

JDK6和XML-API之间的冲突

薛鹏飞
2023-03-14

在将OpenSAML从1.1升级到2.6.1(需要xerces-impl依赖项)之后,启动时会出现以下堆栈:

 Caused by: java.lang.ClassCastException: org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl cannot be cast to javax.xml.datatype.DatatypeFactory
       at javax.xml.datatype.DatatypeFactory.newInstance(DatatypeFactory.java:131) ~[xml-apis-1.4.01.jar:1.6.0_45]
       at com.sun.xml.bind.DatatypeConverterImpl.<clinit>(DatatypeConverterImpl.java:831) ~[glassfish.jaxb_1.0.0.0_2-1-12.jar:2.1.12]
       ... 68 common frames omitted

xerces-impl重新定义了一些jre类,并附带了重新定义一些jre接口的XML-API。DataType.DataTypeFactoryImpl来自xerces-impl。

我读过用Java/Maven处理“Xerces地狱”?并尝试排除XML-API,但xerces-impl抛出NoClassDefoundError。在JRE/lib/encorded中复制XML-API和xerces-impl也会引发ClassCastException(http://docs.oracle.com/javase/6/docs/technotes/guides/standards/)。

在启动命令上添加-djavax.xml.datatype.datatypeFactory=com.sun.org.apache.xerces.internal.jaxp.datatype.datatypeFactoryImpl将引发:

 Caused by: java.lang.ClassCastException: org.apache.xerces.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory
    at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:128) ~[xml-apis-1.4.01.jar:1.6.0_45]
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.getXMLReader(AbstractUnmarshallerImpl.java:80) ~[na:1.6.0_45]

然后添加-djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl将抛出:

 Caused by: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory
    at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
    at ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:79)

我不知道下一步该怎么办。知道吗?

共有1个答案

吴修洁
2023-03-14

WebLogic在类路径上包含了许多这些库的自己版本&它们可能会干扰您的应用程序。尝试向weblogic.xml文件中添加如下所示的部分:

<weblogic-web-app>

  <container-descriptor>
    <prefer-application-packages>
        <package-name>org.slf4j.*</package-name>
        <package-name>org.slf4j.helpers.*</package-name>
        <package-name>org.slf4j.impl.*</package-name>
        <package-name>org.slf4j.spi.*</package-name>
    </prefer-application-packages>
  </container-descriptor>
  ...
</weblogic-web-app>

该示例显示了SLF4J的包;我不知道他们会给Xerces什么。如果您可以访问wls-cat工具,这将有助于解决问题。

更新

    null

我建议在OpenSAML的前一个版本中使用mvn dependency:tree,注意依赖关系。然后切换到新的OpenSAML版本,并注意引入了哪些新的依赖项。查看WLS服务器的modules目录,看看WLS正在使用哪些库,将其与新OpenSAML版本中更改的依赖项进行交叉引用,并确定三种可能性中的哪一种最合适。例如,如果您看到WLS使用的lib版本比您的应用程序更早,那么您可能希望使用选项1。这样做,直到可以部署应用程序,然后使用wls-cat完成这项工作。

 类似资料:
  • null JDBC URL:jdbc:ucanaccess://f://workspaceNetbeans/msaccessdb/data/datenbank2.accdb “用户名”和“密码”留空 “测试连接”-按钮会导致错误消息: 无法使用 net.ucanaccess.jdbc.ucanaccessDriver建立到jdbc:ucanaccess://f:\workspaceNetBeans

  • 问题内容: 我正在使用Apache Spark开发Java应用程序。我使用这个版本: 在我的代码中,有一个过渡依赖性: 我将应用程序打包到一个JAR文件中。使用将其部署到EC2实例上时,出现此错误。 此错误清楚地表明已加载了同一Apache httpclient库的较旧版本,因此发生此冲突。 解决此问题的好方法是什么? 由于某种原因,我无法在Java代码上升级Spark。但是,我可以使用EC2集群

  • 我想在我闪亮的应用程序中引入dplyr代码,但在加载dplyr包的阶段,我已经遇到了一个问题。甚至在我添加任何实际的dplyr代码之前,以及在我添加行之后: 以下错误将代替无功输入之一: 此错误仅在向代码中添加“库(dplyr)”时出现,如果删除了进度条的代码,则不再出现。该错误只会出现,而不会出现属性为被动且通过服务器控制的输入。R.另一个输入保持不变。 请有人指出是什么问题吗?谢谢 服务器R(

  • 本文向大家介绍浏览和冲浪之间的区别,包括了浏览和冲浪之间的区别的使用技巧和注意事项,需要的朋友参考一下 浏览 浏览是指没有任何事先目的或目标的网站访问。用户通常浏览互联网时,会注意到他/她需要的信息。 冲浪 冲浪是指使用搜索引擎搜索特定信息。冲浪通常比浏览耗时,因为用户倾向于在Web上搜索和定位所需的信息。 以下是浏览和冲浪之间的重要区别。 序号 键 浏览 冲浪 1 使用完成 使用网络浏览器进行浏

  • 本文向大家介绍REST API和SOAP API之间的区别,包括了REST API和SOAP API之间的区别的使用技巧和注意事项,需要的朋友参考一下 我们知道,每台机器都以不同的语言或输入来理解和交易,因此Web服务是机器之间进行相互通信并在它们之间交换数据所必需的。为了对其通信实施一些限制,定义了一些规则和规定,称为网络服务,它们基本上定义了需要交换的数据的格式和类型,尤其是两台机器都应注意的

  • 本文向大家介绍假脱机和缓冲之间的区别,包括了假脱机和缓冲之间的区别的使用技巧和注意事项,需要的朋友参考一下 在计算机性能方面,主要因素是多任务处理,即CPU如何在不同的输入输出子系统之间划分和执行进程。为了最有效地处理任务,计算机系统使用各种方法来计划任务,加快计算速度并改善Web浏览,其中假脱机和缓冲是主要方法。 以下是假脱机和缓冲之间的重要区别。 序号 键 假脱机 正在缓冲 1 定义 后台打印