Странная ошибка доступа к методу Xerces

Я пробовал это как на 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.

Спасибо, Грэм.


person GKelly    schedule 07.03.2011    source источник
comment
Кому это понравилось? Я едва придумал вопрос, и он был отмечен как любимый. Просто любопытно.   -  person GKelly    schedule 07.03.2011


Ответы (1)


У вас возникла проблема с загрузчиком классов, потому что вы связываете Xerxes; и Java 1.6 уже включает в себя Xerces.

У меня было много «неожиданных» проблем с xerces, активацией и несколькими другими библиотеками, которые мы использовали до java 1.6 и которые теперь включены в JRE. :(

person Augusto    schedule 07.03.2011
comment
Итак, мне вообще не следует связывать файлы JAR? Я попробую это. Спасибо. - person GKelly; 07.03.2011
comment
да, удалите их из своего приложения. К сожалению, я не нашел список библиотек, которые теперь идут в комплекте с java, и их не следует добавлять :(. - person Augusto; 07.03.2011
comment
Спасибо, я попытался удалить все ссылки на файлы JAR xerces, и теперь это работает. - person GKelly; 08.03.2011