我正在使用JBoss 4.2和jdk6。
我怎样才能在我的webapp中从 xmlparserv2.jar 加载javax.xml.parsers.DocumentBuilderFactory?
当我使用 -verbose:class 时,由jdk6加载的javax.xml.parsers.DocumentBuilderFactory:
[Loaded javax.xml.parsers.DocumentBuilderFactory from C:\Program Files (x86)\Java\jdk1.6.0_21\jre\lib\rt.jar]
和xmlparserv2.jar
Spring加载时有以下跟踪。我使用Spring核心3.1.3。
INFO [STDOUT] ERROR [main] (ContextLoader.java:307) - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/classes/conf/applicationContext.xml]; nested exception is java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174
...
Caused by: java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory
at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:29)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:89)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
... 149 more
MyEar
- lib
...
xmlparserv2.jar
...
- META-INF
application.xml中
的jboss-app.xml中
+ mywar.war
我在战争的WEB-INF / lib中什么也没有。
我无法删除xmlparserv2.jar,因为我需要在某个jar中使用XMLNode的oracle实现。
是否有解决方案没有将JBoss迁移到旧版本?
答案 0 :(得分:0)
您是否可以使用系统属性强制使用您想要的特定工厂?
从here ...
引用信息您还可以在代码中设置系统属性: System.setProperty(" javax.xml.parsers.DocumentBuilderFactory"," new-factory") 例如,如果您使用的是xerces解析器,则new-factory将替换为jorg.apache.xerces.jaxp.DocumentBuilderFactoryImpl。