10

我正在尝试在 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 中。

4

3 回答 3

7

您可以通过执行以下步骤来使用 microsoft 的 EWS api for android,

  1. 下载 URL 中提供的源代码, http://archive.msdn.microsoft.com/ewsjavaapi EWSJavaAPI_1.1.5.zip

  2. 对上述 api 进行更改以在 Eclipse 中适用于 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. 将所有源码保存在eclipse中的单个java项目下

  6. 打开项目资源管理器并选择以“ javax ”开头的包并重命名为您的公司名称,例如:com注意: Eclipse 将要求所有命名上下文都将更改,然后单击 OK。

  7. 将所有 java 源导出到一个 jar 文件。

  8. 然后你就可以毫无问题地在 Android 应用程序中使用 jar 了。

我使用了上面解释的相同方式,它在 android 应用程序中 100% 完美运行。

于 2012-09-12T09:05:32.743 回答
0

这不是一个有用的答案,但在过去的几周里,我也一直在努力查看 EWS API,但没有成功。我发现的主要问题是它引用了很多不在 Android 上的 javax API。您可以找到一个 hack,它解释了如何“重新分类”这些,但我还没有让它工作;此外,DnsClient 引用了一些 jarsearches 只为 rt.jar(主运行时)返回的命名空间。将它包含在 Android 应用程序中简直太疯狂了!

在找到 API 之前,我曾尝试使用 KSOAP 与 EWS 进行通信,但又遇到了问题——您需要能够执行 NTLM 和 SSL,而我找不到任何以任何简单方式将所有这些与 KSOAP 结合的方法。

EWS API 看起来不错(为什么要重新发明轮子),但让它在 Android 上运行看起来非常棘手(如果不是不可能的话)

于 2012-02-13T10:02:10.497 回答
0

请检查库以获取解决方案

于 2014-07-25T10:30:26.013 回答