java - JBoss5 中的 XPath 类解析

标签 java xpath jboss classloader

我很难弄清楚问题出在哪里,所以我发布这篇文章是希望其他人可能已经在其他地方找到了类似的东西,并且愿意分享他们的见解。

我正在使用运行在 Sun Java 1.6.0-13 JDK 之上的 JBoss 5.0.1.GA 应用服务器。对于生成的 Web 服务中的 WAR 文件,我使用 Axis2 1.4 WS 引擎,其 JAR 文件由 Eclipse Galileo 插入项目的 WEB-INF/lib 从动态 Web 项目中给定的“worker”类创建 Web 服务时的目录。相关代码片段如下:

String sUrl = "http://example.com/datafile.xml";
String sPath = "/some/xpath/string";
InputStream input = new URL(sUrl).openStream();
InputSource source = new InputSource(input);
DocumentBuilderFactory docFact = DocumentBuilderFactory.newInstance();
docFact.setNamespaceAware(false);
DocumentBuilder parser = docFact.newDocumentBuilder();
Document doc = parser.parse(source);
XPath xpath = XPathFactory.newInstance().newXPath();
// error occurs here:
String result = (String) xpath.evaluate(path,doc,XPathConstants.STRING);
input.close();

这是我从 JBoss 日志中得到的错误:

java.lang.LinkageError: loader constraint violation: when resolving field "STRING" the class loader (instance of org/jboss/classloader/spi/base/BaseClassLoader) of the referring class, javax/xml/xpath/XPathConstants, and the class loader (instance of <bootloader>) for the field's resolved type, javax/xml/namespace/QName, have different Class objects for that type

可以使用XPath.evaluate(String,Document)——但是在某些情况下我需要获取(例如)XPathConstants.NODESET 代替,所以这是不行的。我还试图通过在 WAR 文件中到处乱扔一些 jboss-web.xml 文件来摸索一点,但没有任何效果。

我想了解的是:

  • 错误可能来自哪里? JBoss 类加载器? JBoss 和 Sun JDK 之间有些奇怪的交互?在创建 Web 服务时 Eclipse 引入了一些奇怪的东西?可能是 WAR 中部署的 Axis2 库引入了一些混淆?
  • 我在看起来像三重打击的情况下找到了已编译类文件的实例:
    • Sun JDK(文件 rt.jar);
    • JBoss 库($JBOSS_HOME/lib/endorsed/stax-api.jar);和
    • Axis2 部署的库($JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jarwoden -impl-dom-1.0M8.jar).
  • 我究竟应该如何配置 JBoss 来告诉它可以从“其他”库中加载哪些类?具体来说,jaxax.xml.namespace.QName 是导致问题的原因。

提前谢谢你。

最佳答案

当应用程序的类路径包含 JBoss 认为“ protected ”的类时,JBoss 将抛出一个 LinkageError,即它不允许应用程序包含它自己的某些关键 API 的副本。

在这种情况下,您的应用程序似乎包含它自己的 javax.xml.xpath API 副本,并且可能还包含您提到的其他一些副本。

您需要从 EAR/WAR 的 lib 目录中删除与 JBoss 自己的库冲突的所有内容(例如 axis2-saaj-api-1.4.jar)。

关于java - JBoss5 中的 XPath 类解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247662/

相关文章:

java - 在 Java REST 服务中浏览 IBM MQ 时出现 ResourceException

带有空分隔符的 Java 扫描器

java - 来自 Java 的 HTTP POST 存在 JSON 问题

java - 如何在 python 中设置斯坦福解析器的 -maxLength 选项

parsing - 如何修改 XPATH 解析器?

css - 使用 XPath 和 CSS 定位元素

ruby - Nokogiri 中的 XPath 返回空数组 [] 而我期望得到结果

java - MySQL 的 Jboss 数据源配置 - MysqlXADataSource 元素

java - Eclipse 3.4 上的 Jboss 配置 : stopping issue

performance - 使用 Jmeter 的 JBOSS wildfly 10 性能调优