我在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 Decompilor中跟踪代码,在xercesImpl.jar
我可以看到DocumentBuilderFactoryImpl.setAttribute()
调用尝试创建新的DocumentBuilderImpl
,这似乎是IllegalAccessError
的原因1}}。 DocumentBuilderImpl
的构造函数具有默认(包)访问权限,但DocumentBuilderImpl
和DocumentBuilderFactoryImpl
都位于同一个包中(org.apache.xerces.jaxp
)。
据我所知,错误时没有SecurityManager
处于活动状态(我甚至不确定SecurityManager
是否会影响方法访问权限,我认为仅用于类加载和资源访问权限。
任何想法我能做什么(没有重新编译xerces JAR,限制性较低的访问权限,我想解决问题的根源,而不是解决它!,我也更喜欢使用标准我可以在哪里JAR。
我应该提一下,我正在使用Spring 3.0.5,OC4J 10.0.3.5.0(使用Xerces XML解析器代替Oracle XML解析器)和Java 1.6.0- 21。
由于 格雷厄姆
答案 0 :(得分:2)
你有一个类加载器问题,因为你正在捆绑Xerxes;和Java 1.6已经捆绑了Xerces。
我有很多“意外”的问题,包括xerces,激活以及我们在java 1.6之前外部并且现在捆绑在JRE中的一些其他库。 :(