Android: создание фабрики JNDI от размышлений о том, что Android форсирует javax - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь портировать: 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 Ответ

0 голосов
/ 21 января 2012

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

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

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

...