jba*_*sta 8 java jboss xpath classloader
我很难弄清楚问题的来源,所以我发布这篇文章是希望其他人可能在其他地方找到类似的东西,并且非常友好地分享他们的见解.
我正在使用运行在Sun Java 1.6.0-13 JDK之上的JBoss 5.0.1.GA应用程序服务器.对于生成的Web Service中的WAR文件,我使用Axis2 1.4 WS引擎,当从Dynamic Web Project中的给定"worker"类创建Webservice时,Eclipse Galileo将JAR文件插入到项目的目录中.相关的代码段如下:WEB-INF/lib
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();
Run Code Online (Sandbox Code Playgroud)
这是我从JBoss日志得到的错误:
java.lang.LinkageError:加载器约束违规:当解析字段"STRING"时,引用类的类加载器(org/jboss/classloader/spi/base/BaseClassLoader的实例),javax/xml/xpath/XPathConstants和类用于字段的已解析类型的加载程序(<bootloader>的实例),javax/xml/namespace/QName,具有该类型的不同Class对象
我可以使用XPath.evaluate(String,Document)- 但是有时我需要得到(例如)a XPathConstants.NODESET,所以这是不行的.我还试图jboss-web.xml在WAR文件中乱丢乱丢一些文件,但没有任何效果.
我想要了解的是:
rt.jar);$JBOSS_HOME/lib/endorsed/stax-api.jar); 和$JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jar和woden-impl-dom-1.0M8.jar).jaxax.xml.namespace.QName是导致悲伤.先感谢您.
LinkageError当应用程序的类路径包含JBoss认为"受保护"的类时,JBoss将抛出一个,即它不允许应用程序包含它自己的某些关键API的副本.
在这种情况下,看起来您的应用程序包含自己的javax.xml.xpathAPI 副本,也可能包含其他一些副本,如您所述.
您需要从与JBoss自己的库(例如axis2-saaj-api-1.4.jar)冲突的EAR/WAR的lib目录中删除任何内容.
看来问题是通过javax.xml.namespace.*从部署的 Axis2 JAR 文件中删除包和相应的类来解决的。也就是说,使用Axis2 1.4.1(而不是 1.4),我重新打包了这些 JAR 文件:
axis2-saaj-api-1.4.1.jar,通过删除 javax.xml.namespacewoden-impl-dom-1.0M8.jar,通过删除 javax另外,Eclipse 对项目配置非常挑剔。到目前为止,我发现动态 Web 项目的 Project Facet必须使用版本2.4的动态 Web 模块(而不是默认建议的 2.5)创建,但使用 Java 版本6(与分支相同)所使用的 JDK)。我不知道为什么会发生这种情况,我想 Eclipse 中默认与 Java 1.4 捆绑在一起的 Dynamic Web Module 版本 2.4 是所有混乱的根源。一些谷歌搜索让我相信包 javax.xml 直到 Java 5 或 Java 6 才被合并到 JDK 中——因此可能会混淆!但是,我的知识不够,无法调查问题是否来自 Eclipse 如何打包存档文件以进行部署,因此这只是我到目前为止的怀疑。
| 归档时间: |
|
| 查看次数: |
10084 次 |
| 最近记录: |