我们正在尝试使用来自Karaf内部的Camel路由的JPA来读取/写入mysql数据库的简单用例。当camel加载包含路由的代码时,这经常/总是导致以下堆栈跟踪:
2013-07-19 17:01:47,178 |警告| ft.WorkoutEntity | JpaConsumer | rg.apache.camel.util.CamelLogger 224 | 68 - org.apache.camel.camel-core - 2.10.4 |消费者消费者[jpa:// WorkoutEntity]轮询终点失败:端点[jpa:// WorkoutEntity]。将在下次投票时再试一次。引起:[java.lang.NoClassDefFoundError - 无法初始化类org.apache.openjpa.lib.xml.XMLFactory] java.lang.NoClassDefFoundError:无法初始化类org.apache.openjpa.lib.xml.XMLFactory 在org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) 在org.apache.openjpa.jdbc.sql.DBDictionary.endConfiguration(DBDictionary.java:4712) 在org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518) 在org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443) 在org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:100)
XMLFactory包含在我的bundle已导入的OpenJPA聚合包中。我甚至可以从同一个org.apache.openjpa.lib.xml包中实例化其他对象。
我破解了openource OpenJPA代码并查看了XMLFactory。顶部有一个静态块,应该在加载类时调用。静态块看起来并不复杂,只是实例化SAX和DOM解析器工厂。
如果在我的包含路由的java代码中添加以下行:
org.apache.openjpa.lib.xml.XMLFactory.getClass()
要在ClassLoader中加载类,错误 有时 将停止。
以下是一些版本信息:
Karaf => 2.3.2
Camel =>试过2.10.4和2.11.1
OpenJPA =>试过2.2.0和2.2.2
Mysql => 5.1.25
如果您需要更多信息,请与我们联系。
- 新信息 - 我从karaf提示符启用了DEBUG级别日志记录,现在在NoClassDefError之前看到此错误
2013-07-19 17:35:36,784 |调试| ft.WorkoutEntity | TransactionTemplate | tion.support.TransactionTemplate 160 | 75 - org.springframework.transaction - 3.2.3.RELEASE |在应用程序异常上启动事务回滚 javax.xml.parsers.FactoryConfigurationError:找不到 提供程序org.apache.xerces.jaxp.SAXParserFactoryImpl 在javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:122)[:2.2.0] 在org.apache.openjpa.lib.xml.XMLFactory。(XMLFactory.java:60) 在org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) 在org.apache.openjpa.jdbc.sql.DBDictionary.endConfiguration(DBDictionary.java:4712) 在org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518) 在org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443) 在org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) 在org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:100) 在org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
这解释了NoClassDefFound错误。
答案 0 :(得分:0)
您可能没有安装过Xerces。
尝试从maven安装它及其依赖项:
osgi:install wrap:mvn:xml-apis/xml-apis/1.4.01
osgi:install wrap:mvn:xml-resolver/xml-resolver/1.2
osgi:install wrap:mvn:xerces/xercesImpl/2.11.0