Я пробовал это как на 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 вместо синтаксического анализатора XML Oracle) и Java 1.6.0-21.
Спасибо, Грэм.