java - 奇怪的 Xerces 方法访问错误

标签 java spring xerces oc4j

我已在 Xerces 2.9.1 和 Xerces-J-2.11.0 上尝试过此操作,结果相同。

我正在编写一个 Spring3 Webflow 应用程序,使用 Xerces 进行 XML 解析。部署 EAR 时,我遇到问题

Caused by: java.lang.IllegalAccessError: tried to access method org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Lorg/apache/xerces/jaxp/DocumentBuilderFactoryImpl;Ljava/util/Hashtable;Ljava/util/Hashtable;)V from class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
    at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.setAttribute(Unknown Source)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:99)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
    ... 30 more

如果我在 Java 反编译器中跟踪 xercesImpl.jar 中的代码,我可以看到 DocumentBuilderFactoryImpl.setAttribute() 调用尝试创建一个新的 DocumentBuilderImpl ,这似乎是 IllegalAccessError 的原因。 DocumentBuilderImpl 的构造函数具有默认(包)访问权限,但 DocumentBuilderImplDocumentBuilderFactoryImpl 驻留在同一包 (org. apache.xerces.jaxp)。

据我所知,错误发生时没有 SecurityManager 处于 Activity 状态(而且我什至不确定 SecurityManager 是否会影响方法访问权限,我以为只是类加载和资源访问权限)。

我能做什么的任何想法(除了以较少限制的访问权限重新编译 xerces JAR 之外,我想找出问题的根源,而不是解决它!,我也更喜欢使用标准我可以的 JAR)。

我应该提到,我正在使用 Spring 3.0.5、OC4J 10.0.3.5.0(使用 Xerces XML 解析器而不是 Oracle XML 解析器的解决方法)和 Java 1.6.0- 21.

谢谢 格雷厄姆

最佳答案

您遇到了类加载器问题,因为您正在捆绑 Xerxes; Java 1.6 已经捆绑了 Xerces。

我在 xerces、激活以及我们在 java 1.6 之前外部的一些其他库(现在捆绑在 JRE 中)方面遇到了许多“意外”问题。 :(

关于java - 奇怪的 Xerces 方法访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221267/

相关文章:

java - 使用 XSAttributeUse.getValueConstraintValue() 时,Apache Xerces 抛出 java.lang.NoSuchMethodError

java - Java中从文件的相对路径获取文件大小

java - 将列表中的元素移动到最后一个索引

java - java struts 如何使用另一个列表框添加值列表框?

java - 依赖注入(inject): Jetty 7

java - 修复 XML 文件中的错误编码

java - Travis 使用 ant 代替 Maven

java - Spring Security - j_spring_security_check - HTTP 状态 403

java - 无法创建 tempDir。 java.io.tmpdir 设置为 C :\windows\

java - 如何使用一 jar ?