Android:从Android上的反射实例化JNDI工厂,强制javax



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

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

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

有人知道为什么不能在这里实例化它吗?我想知道proguard是否打破了思考,。。。但我正在用调试ant任务构建它,。。所以我觉得proguard根本不应该参加竞选。当我在模拟器上运行已安装的应用程序时,会发生异常。我让ApacheQpid服务在它使用的默认端口的同一台机器上运行。

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)

谢谢你的提示!

我想我发现了问题——Android在版本2.3 之前的Reflection中有错误

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

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

相关内容

  • 没有找到相关文章

最新更新