1

我们正在尝试一个简单的用例,使用来自 Karaf 内部 Camel 路由的 JPA 读取/写入 mysql 数据库。当骆驼加载包含路由的代码时,这经常/总是导致以下堆栈跟踪:

2013-07-19 17:01:47,178 | 警告 | ft.WorkoutEntity | Jpa消费者 | rg.apache.camel.util.CamelLogger 224 | 68 - org.apache.camel.camel-core - 2.10.4 | Consumer Consumer[jpa://WorkoutEntity] 轮询端点失败:Endpoint[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.DBDictionary.endConfiguration(DBDictionary.java:4712) 中的 org.apache.openjpa.lib.conf 中的 apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107)。 org.apache.openjpa.lib.conf.Configurations 中的 Configurations.configureInstance(Configurations.java:518)。

XMLFactory 包含在我的包已导入的 OpenJPA 聚合包中。我什至可以从同一个 org.apache.openjpa.lib.xml 包中实例化其他对象。

我破解了开源 OpenJPA 代码并查看了 XMLFactory。加载类时应调用顶部的静态块。静态块看起来并不复杂,只是实例化了 SAX 和 DOM 解析器工厂。

如果在包含路由的 java 代码中,我添加以下行:

org.apache.openjpa.lib.xml.XMLFactory.getClass()

在 ClassLoader 中加载类,错误有时会停止。

这是一些版本信息:

卡拉夫 => 2.3.2

骆驼 => 试过 2.10.4 和 2.11.1

OpenJPA => 试过 2.2.0 和 2.2.2

mysql => 5.1.25

如果您需要更多信息,请告诉我。

-新信息-我从karaf 提示符打开了调试级别日志记录,现在在 NoClassDefError 之前看到此错误

2013-07-19 17:35:36,784 | 调试 | ft.WorkoutEntity | 交易模板 | tion.support.TransactionTemplate 160 | 75 - org.springframework.transaction - 3.2.3.RELEASE | 在应用程序异常 javax.xml.parsers.FactoryConfigurationError 上启动事务回滚:在 javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:122)[:2.2.0] 处找不到提供程序 org.apache.xerces.jaxp.SAXParserFactoryImpl 在 org.apache.openjpa.lib.xml.XMLFactory.(XMLFactory.java:60) 在 org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) 在 org.apache.openjpa.jdbc。 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:100) 在 org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) .openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)

这解释了 NoClassDefFound 错误。

4

1 回答 1

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
于 2013-07-19T17:50:01.400 回答