0

我正在尝试将 Apache Qpid Client、JMS 和 JNDI 移植到 Android。在将 --core-library 参数传递给 Dalvik 以允许 JMS/JNDI 的 javax 包之后运行 ant 调试安装目标时,我能够成功编译/构建我的 QpidDroid 项目。在考虑使用 jarjar 将 javax 类重新打包/重构到不同的包命名空间之前,我希望这样做。

我认为这是合法的,因为我使用的是 Oracle 网站目前提供的旧的/第一个单独的 JNDI jar。我在 Qpid 中使用 Apache Geronimo 附带的 JMS jar,.. 但我认为它也可以从 Oracle 单独下载。我的开发环境使用 Android 平台 2.1 和 jdk 1.6。

问题是,它目前似乎无法实例化我的自定义 jndi 连接工厂:PropertiesFileInitialContextFactory。这是我的 QpidDroid 项目中的 .java 源文件(不是 libs jar 中的 .class)(我从 qpidClient jar 中提取了类)。

有人知道为什么它不能在这里实例化吗?我想知道 proguard 是否会破坏反射,......但我正在使用调试 ant 任务构建它,......所以我认为 proguard 根本不应该运行。当我在模拟器上运行已安装的应用程序时发生异常。我在使用默认端口的同一台机器上运行 Apache Qpid 服务。

01-18 18:05:16.966: W/System.err(296): [Root exception is java.lang.ClassNotFoundException: org.apache.qpid.jndi.PropertiesFileInitialContextFactory]javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.qpid.jndi.PropertiesFileInitialContextFactory
01-18 18:05:17.006: W/System.err(296):  at javax.naming.spi.NamingManager.getDefaultInitialContextFactory(NamingManager.java:720)
01-18 18:05:17.006: W/System.err(296):  at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:768)
01-18 18:05:17.016: W/System.err(296):  at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:169)
01-18 18:05:17.016: W/System.err(296):  at javax.naming.InitialContext.<init>(InitialContext.java:146)
01-18 18:05:17.016: W/System.err(296):  at org.rif.QpidDroid.Hello.runTest(Hello.java:56)

感谢您的任何提示!

4

1 回答 1

0

我想我找到了问题——Android 在 2.3 版之前的 Reflection 中存在错误

http://code.google.com/p/android/issues/detail?id=6636

我将我的 QpidDroid 项目移植到 Android 2.3,看起来 JNDI 现在正在使用 QPID 连接参数成功创建 InitialContext

于 2012-01-20T23:57:21.430 回答