最近在做一个OSGI的扩展插件,在集成Hibernate的时候,运行在equinox中没问题,但是运行在felix 2.0.1中的时候,出现了如下错误:
org.xml.sax.SAXException: Can't create default XMLReader; is system property org.xml.sax.driver set?
at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(Unknown Source)
at org.dom4j.io.SAXHelper.createXMLReader(SAXHelper.java:83)
at org.dom4j.io.SAXReader.createXMLReader(SAXReader.java:894)
at org.dom4j.io.SAXReader.getXMLReader(SAXReader.java:715)
at org.dom4j.io.SAXReader.read(SAXReader.java:435)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1366)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1325)
at com.bing.hibernate.service.impl.SessionComponent.initSessionFactory(SessionComponent.java:166)
at com.bing.hibernate.service.impl.SessionComponent.registryChanged(SessionComponent.java:156)
at com.bing.register.impl.RegisterImpl.notifyListeners(RegisterImpl.java:67)
at com.bing.register.impl.RegisterImpl.fireAddExtension(RegisterImpl.java:57)
at com.bing.register.impl.ExtensionPointImpl.addExtention(ExtensionPointImpl.java:90)
at com.bing.register.impl.RegisterImpl.findExtenpoint(RegisterImpl.java:168)
at com.bing.register.impl.RegisterImpl.registerExtensions(RegisterImpl.java:114)
at com.bing.privacy.util.XMLParser.process(XMLParser.java:80)
at com.bing.privacy.util.XMLParser.getXMLMapformat(XMLParser.java:42)
at com.bing.register.impl.RegisterImpl.addExtensionStuff(RegisterImpl.java:148)
at com.bing.listener.GlobalListener.bundleChanged(GlobalListener.java:30)
at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:956)
at org.apache.felix.framework.util.EventDispatcher.access$4(EventDispatcher.java:914)
at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
at java.lang.Thread.run(Unknown Source)
Warning: Caught exception attempting to use SAX to load a SAX XMLReader
Warning: Exception was: org.xml.sax.SAXException: Can't create default XMLReader; is system property org.xml.sax.driver set?
Warning: I will print the stack trace then carry on using the default SAX parser
【Session管理器】(2012-05-15 14:52:52):初始化Hibernate SessionFactory时出现错误
org.hibernate.HibernateException: Could not parse configuration: bundle://10.0:1/hibernate.cfg.xml
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1376)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1325)
at com.bing.hibernate.service.impl.SessionComponent.initSessionFactory(SessionComponent.java:166)
at com.bing.hibernate.service.impl.SessionComponent.registryChanged(SessionComponent.java:156)
at com.bing.register.impl.RegisterImpl.notifyListeners(RegisterImpl.java:67)
at com.bing.register.impl.RegisterImpl.fireAddExtension(RegisterImpl.java:57)
at com.bing.register.impl.ExtensionPointImpl.addExtention(ExtensionPointImpl.java:90)
at com.bing.register.impl.RegisterImpl.findExtenpoint(RegisterImpl.java:168)
at com.bing.register.impl.RegisterImpl.registerExtensions(RegisterImpl.java:114)
at com.bing.privacy.util.XMLParser.process(XMLParser.java:80)
at com.bing.privacy.util.XMLParser.getXMLMapformat(XMLParser.java:42)
at com.bing.register.impl.RegisterImpl.addExtensionStuff(RegisterImpl.java:148)
at com.bing.listener.GlobalListener.bundleChanged(GlobalListener.java:30)
at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:956)
at org.apache.felix.framework.util.EventDispatcher.access$4(EventDispatcher.java:914)
at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
at java.lang.Thread.run(Unknown Source)
Caused by: org.dom4j.DocumentException: Can't create default XMLReader; is system property org.xml.sax.driver set? Nested exception: Can't create default XMLReader; is system property org.xml.sax.driver set?
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1366)
... 18 more
java.lang.RuntimeException: 初始化Hibernate SessionFactory错误:org.hibernate.HibernateException: Could not parse configuration: bundle://10.0:1/hibernate.cfg.xml
at com.bing.hibernate.service.impl.SessionComponent.initSessionFactory(SessionComponent.java:188)
at com.bing.hibernate.service.impl.SessionComponent.registryChanged(SessionComponent.java:156)
at com.bing.register.impl.RegisterImpl.notifyListeners(RegisterImpl.java:67)
at com.bing.register.impl.RegisterImpl.fireAddExtension(RegisterImpl.java:57)
at com.bing.register.impl.ExtensionPointImpl.addExtention(ExtensionPointImpl.java:90)
at com.bing.register.impl.RegisterImpl.findExtenpoint(RegisterImpl.java:168)
at com.bing.register.impl.RegisterImpl.registerExtensions(RegisterImpl.java:114)
at com.bing.privacy.util.XMLParser.process(XMLParser.java:80)
at com.bing.privacy.util.XMLParser.getXMLMapformat(XMLParser.java:42)
at com.bing.register.impl.RegisterImpl.addExtensionStuff(RegisterImpl.java:148)
at com.bing.listener.GlobalListener.bundleChanged(GlobalListener.java:30)
at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:956)
at org.apache.felix.framework.util.EventDispatcher.access$4(EventDispatcher.java:914)
at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
at java.lang.Thread.run(Unknown Source)
翻看了所有的文档,寻找解决方案。最后找到了原因如下:
java 系统之中使用的是JDom,Xerces解析器解析XML。在1.4之前,属于java的扩展部分,而在1.5之后,已经加入到了JDK之中了。我的系统之中的java版本是1.6,所以,包含了类路径之中加入的XercesImpl.jar XML-api.jar,所以,在项目类路径之中加入那两个包以后,会造成冲突,就出现了上述的错误。将其从项目类路径之中删除后,工作正常。