Я пробовал это как на 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
имеет доступ по умолчанию (пакет), но оба DocumentBuilderImpl
и DocumentBuilderFactoryImpl
находятся в одном пакете (org.apache.xerces.jaxp
).
Насколько я знаю, тамSecurityManager
не активен во время ошибки (и я даже не уверен, повлияет ли SecurityManager
на права доступа к методу, я думал, что это только для загрузки классов и прав доступа к ресурсам).
Любые идеи, которые я могу сделать (кроме перекомпиляции JAR-файла xerces с менее ограничивающими правами доступа, я бы хотел разобраться в корне проблемы, а не обходить ее без ограничений !, Я бы также предпочел использовать стандартные JARгде я могу).
Я должен упомянуть, я использую Spring 3.0.5, OC4J 10.0.3.5.0 (с возможностью обхода использовать синтаксический анализатор Xerces XML вместо синтаксического анализатора Oracle XML) и Java 1.6.0-21.
Спасибо, Грэм