Проблемы с использованием EWS Java API на Android

Я пытаюсь использовать EWS Java API версии 1.1.5 (http://archive.msdn.microsoft.com/ewsjavaapi) в приложении для Android и столкнулся с рядом проблем. Я скачал исходный код и следовал инструкциям по компиляции EWS Java API в Eclipse. В этих инструкциях вам предлагается загрузить и добавить следующие необходимые зависимости файла jar:

  • общий кодек-1.4.jar
  • Commons-httpclient-3.1.jar
  • Commons-регистрация-1.1.1.jar
  • jcifs-1.3.15.jar

Я сделал это и, следуя инструкциям по сборке, создал следующие файлы jar:

  • EWSAPI-1.1.0.jar
  • EWSAPIWithJars-1.1.0

Затем я создал совершенно новое приложение для Android, добавил соответствующие разрешения в манифест, а затем добавил следующий источник в OnCreate основного действия:

ExchangeService service = new ExchangeService();
ExchangeCredentials credentials = new WebCredentials("emailaddress", "password");       
service.setCredentials(credentials);

try
{
    service.autodiscoverUrl("emailaddress", this);
}
catch (Exception e)
{       
    e.printStackTrace();
}

Сначала я попытался запустить это приложение с файлом EWSAPI-1.1.0.jar в качестве зависимости. Когда я это сделал, я получил следующую фатальную ошибку:

Неперехваченный обработчик: основной поток завершается из-за необработанного исключения .(Неизвестный источник) в microsoft.exchange.webservices.data.ExchangeService.(Неизвестный источник) в com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:40)

Из того, что я исследовал, кажется, что эта ошибка возникает из-за того, что Android поставляется с Apache HttpClient 4.0, который, похоже, больше не имеет класса MultiThreadedHttpConnectionManager.

Если вместо этого я удалю EWSAPI-1.1.0.jar и вместо этого использую файл EWSAPIWithJARS-1.1.0.jar в качестве зависимости, я получаю следующую ошибку:

VFY: не удалось разрешить статический метод 908: Ljavax/xml/stream/XMLOutputFactory; newInstance()Ljavax/xml/stream/XMLOutputFactory; VFY: мертвый код 0x0008-006a в L microsoft/exchange/webservices/data/EwsUtilities;.formatLogMessage (Ljava/lang/String;Ljava/lang/String;) Ljava/lang/String; VFY: не удалось найти класс, указанный в подписи (Ljavax/xml/stream/XMLStreamWriter;)

А потом в конце концов...

НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной java.lang.VerifyError: microsoft.exchange.webservices.data.AutodiscoverService в microsoft.exchange.webservices.data.ExchangeService.getAutodiscoverUrl (неизвестный источник) в microsoft.exchange.webservices.data.ExchangeService.autodiscoverUrl (неизвестный источник ) в com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:41)

Я предполагаю, что теперь я включаю банку HttpClient 3.1, и она конфликтует с банкой HttpClient 4.0, включенной в библиотеки Android.

Мой вопрос заключается в том, есть ли способ использовать EWS Java API в проекте Android без необходимости переписывать его части, которые ссылаются на специфичные для HttpClient 3.1 вещи, которых больше нет в 4.0.


person Raul Agrait    schedule 08.02.2012    source источник
comment
Обновление: Уволился с работы. Нашел лучше.   -  person Raul Agrait    schedule 14.09.2012
comment
не могли бы вы дать ссылку, где вы можете получить инструкции по сборке для создания файлов jar. которые представляют собой 2 файла jar, которые необходимо создать. Помогите пожалуйста.. мне срочно   -  person png    schedule 04.02.2013


Ответы (3)


Вы можете использовать Microsoft EWS API для Android, выполнив следующие шаги:

  1. загрузите исходный код, доступный по URL-адресу, http://archive.msdn.microsoft.com/ewsjavaapi EWSJavaAPI_1.1.5.zip

  2. Внесите изменения в вышеуказанный API для работы с JDK 1.4 в eclipse, например, удалите аннотации переопределения и т. д.

  3. Загрузите исходный код пакета javax.* по приведенному ниже URL-адресу: http://www.java2s.com/Code/JarDownload/jsr173/jsr173_1.0_src.jar.zip

  4. Загрузите исходный код stax api, доступный по приведенному ниже URL-адресу: http://dist.codehaus.org/stax/distributions/stax-src-1.2.0.zip

  5. Храните все источники в одном проекте Java в eclipse

  6. Откройте проводник проекта и выберите пакет, который начинается с «javax», и переименуйте его в название вашей компании, например: com. Примечание. Eclipse запросит изменение всех контекстов именования, затем нажмите OK.

  7. Экспортируйте все исходники Java в один JAR-файл.

  8. Тогда вы можете без проблем использовать банку в приложении для Android.

Я использовал тот же способ, который описан выше, и он отлично работал в приложении для Android на 100%.

person user1106480    schedule 12.09.2012
comment
После нескольких часов танцев вокруг всего этого добра мне наконец удалось это сделать! СПАСИБО!!! - person Sergey Kostrukov; 21.01.2013
comment
Я пытаюсь сделать то же самое, и это не работает. Я сделал файл jar и добавил его в проект Android. Но когда я пытаюсь получить доступ к любому классу из этой библиотеки, я получаю исключение classdefnotfound. Пожалуйста помоги . - person png; 03.02.2013
comment
если кто-то сделал это, почему бы им не опубликовать это где-нибудь в репозитории github, чтобы все могли извлечь выгоду? - person Brad Parks; 22.07.2013
comment
Привет, @preetha, у тебя получилось? Даже у меня такая же ошибка. - person Darpan; 08.04.2014

Это бесполезный ответ, но последние пару недель я безуспешно пытался изучить API EWS. Основная проблема, которую я обнаружил, заключается в том, что она ссылается на множество API-интерфейсов javax, которых нет на Android. Вы можете найти хак, который объясняет, как «переклассифицировать» их, но у меня он еще не работает; кроме того, DnsClient ссылается на некоторые пространства имен, которые jarsearch возвращает только для rt.jar — основной среды выполнения. И включить это в приложение для Android было бы просто безумием!

Прежде чем найти API, я пытался использовать KSOAP для связи с EWS, но снова столкнулся с проблемами — вам нужно иметь возможность использовать NTLM и SSL, и я не смог найти никакого простого способа объединить все это с KSOAP.

EWS API выглядит перспективным (зачем изобретать велосипед), но заставить его работать на Android очень сложно (если вообще возможно)

person James    schedule 13.02.2012
comment
Да, я пошел по тому же пути, пытаясь сослаться на API-интерфейсы javax, но столкнулся с большими трудностями после той же статьи. Я также столкнулся с проблемами с NTLM. - person Raul Agrait; 14.02.2012
comment
Я получил версию NTLM без Ksoap и базовую аутентификацию, работающую с Exchange на Android, и разместил образец здесь: /брэдпаркс/ - person Brad Parks; 22.07.2013

Найдите решение в этой библиотеке.

person Faison N.P    schedule 25.07.2014