Android: создание фабрики JNDI от размышлений о том, что Android форсирует javax

Я пытаюсь портировать: Apache Qpid Client, JMS и JNDI - на Android. Я могу получить успешную компиляцию / сборку моего проекта QpidDroid при запуске целей установки ant debug после передачи Dalvik параметра --core-library, чтобы разрешить пакеты javax для JMS/JNDI. Я надеюсь сделать это, прежде чем рассматривать переупаковку / рефакторинг классов javax в другое пространство имен пакетов с использованием jarjar.

Я думаю, что это юридически законно, потому что я использую старый / первый отдельный JNDI jar, в настоящее время предоставленный веб-сайтом Oracle. Я использую JMS-jar, который поставляется с Apache Geronimo в Qpid, но я думаю, что он также доступен от Oracle для отдельной загрузки. Моя среда разработки использует платформу Android 2.1 и jdk 1.6.

Проблема, кажется, в настоящее время не может создать экземпляр моей собственной фабрики соединений jndi: PropertiesFileInitialContextFactory. Это исходный файл.java в моем проекте QpidDroid (не.class в jar-файле libs) (я извлек класс из jar-файла qpidClient).

Будет ли кто-то иметь представление о том, почему это не может быть создано здесь? Мне было интересно, может ли proguard нарушать рефлексию,... но я строю это с помощью задачи отладки муравья... поэтому я думаю, что 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)

Спасибо за любые советы!

1 ответ

Я думаю, что нашел проблему - в Android есть ошибки с Reflection до версии 2.3

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

Я перенес свой проект QpidDroid на Android 2.3, и похоже, что JNDI успешно создает InitialContext теперь с параметрами соединения QPID

Другие вопросы по тегам