【问题标题】:NoClassDefFoundError in org.apache.openjpa.lib.xml.XMLFactory from inside KarafKaraf 内部的 org.apache.openjpa.lib.xml.XMLFactory 中的 NoClassDefFoundError
【发布时间】:2013-07-19 02:05:47
【问题描述】:

我们正在尝试使用 JPA 从 Karaf 内部的 Camel 路由读取/写入 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.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)

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 提示符打开了 DEBUG 级别日志记录,现在在 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: 未找到提供程序 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 错误。

【问题讨论】:

    标签: java osgi apache-camel openjpa


    【解决方案1】:

    您可能没有安装 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
    

    【讨论】:

    • 呃。一个 OSGi 包不应该仅仅因为缺少包而抛出 NoClassDefFoundError。
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多