Проблемы с использованием EWS Java API на Android - PullRequest
9 голосов
/ 09 февраля 2012

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

  • commons-codec-1.4.jar
  • commons-httpclient-3.1.jar
  • commons-logging-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 в качестве зависимости.сделал это, я получил следующую фатальную ошибкуr:

Необработанный обработчик: выход из основного потока из-за неперехваченного исключения) в microsoft.exchange.webservices.data.ExchangeServiceBase. (Неизвестный источник) в 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 / поток / 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;)

И затем в конечном итоге ...

ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: main java.lang.VerifyError: microsoft.exchange.webservices.data.AutodiscoverService в microsoft.exchange.webservices.data.ExchangeService.getAutodiscoverUrl (неизвестный источник) в microsoft.exchange.webservices.data.ExchangeService.autodiscoverexhin.mes.ExchangeDiscoveryActivity.onCreate (ExchangeDiscoveryActivity.java:41)

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

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

Ответы [ 3 ]

7 голосов
/ 12 сентября 2012

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

  1. скачать исходный код, доступный в URL, http://archive.msdn.microsoft.com/ewsjavaapi EWSJavaAPI_1.1.5.zip

  2. Внесите изменения в api выше, чтобы работать для JDK 1.4 в затмении, например удалить аннотации отмены и т. д.

  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. Тогда вы можете использовать jar в приложении Android без каких-либо проблем.

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

0 голосов
/ 25 июля 2014

Пожалуйста, проверьте эту библиотеку для решения

0 голосов
/ 13 февраля 2012

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

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

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

...