我正在尝试在 Android 应用程序中使用 EWS Java API v1.1.5 (http://archive.msdn.microsoft.com/ewsjavaapi),但遇到了许多问题。我下载了源代码,并按照提供的说明在 Eclipse 中编译 EWS Java API。在这些说明中,您被告知下载并添加以下先决条件 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 文件作为依赖项运行此应用程序。当我这样做时,我得到了以下致命错误:
未捕获的处理程序:由于未捕获的异常 java.lang.NoClassDefFoundError: org.apache.commons.httpclient.MultiThreadedHttpConnectionManager 在 microsoft.exchange.webservices.data.ExchangeServiceBase 退出线程主。(未知来源)在 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/stream/XMLOutputFactory; VFY:L microsoft/exchange/webservices/data/EwsUtilities 中的死代码 0x0008-006a;.formatLogMessage (Ljava/lang/String;Ljava/lang/String;) Ljava/lang/String; VFY:无法找到签名中引用的类 (Ljavax/xml/stream/XMLStreamWriter;)
然后最终...
致命异常:主要 java.lang.VerifyError:microsoft.exchange.webservices.data.ExchangeService.getAutodiscoverUrl 上的 microsoft.exchange.webservices.data.AutodiscoverService(来源不明) microsoft.exchange.webservices.data.ExchangeService.autodiscoverUrl(来源不明) ) 在 com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:41)
我假设是因为现在我包含了 HttpClient 3.1 jar,它与 Android 库中包含的 HttpClient 4.0 jar 冲突。
我的问题是,是否有办法让我在 Android 项目中使用 EWS Java API,而不必重新编写其中引用 HttpClient 3.1 特定内容的部分,这些内容不再在 4.0 中。