在Android上使用EWS Java API时出现问题

Rau*_*ait 9 android exchangewebservices apache-commons-httpclient ewsjavaapi

我试图在Android应用程序中使用EWS Java API v1.1.5(http://archive.msdn.microsoft.com/ewsjavaapi),并遇到了许多问题.我下载了源代码,并按照提供的说明在Eclipse中编译EWS Java API.在这些说明中,您被告知要下载并添加以下pre-requiste jar文件依赖项:

  • 公地编解码器1.4.jar
  • 公地httpclient的-3.1.jar
  • 共享记录-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();
}
Run Code Online (Sandbox Code Playgroud)

我首先尝试使用EWSAPI-1.1.0.jar文件作为依赖项运行此应用程序.当我这样做时,我得到了以下致命错误:

未捕获的处理程序:由于未捕获的异常而导致主要退出java.lang.NoClassDefFoundError:org.apache.commons.httpclient.MultiThreadedHttpConnectionManager at microsoft.exchange.webservices.data.ExchangeServiceBase.(Unknown Source)at microsoft.exchange.webservices.data.ExchangeServiceBase .(unknown Source)at microsoft.exchange.webservices.data.ExchangeService.(Unknown Source)at 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: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 at microsoft.exchange.webservices.data.ExchangeService.autodiscoverUrl(Unknown Source )在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.

小智 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将要求更改所有命名上下文,然后单击"确定".

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

  8. 然后你好在Android应用程序中使用jar而没有任何问题.

我用上面解释的相同方式,它在Android应用程序100%完美地工作.

  • 如果有人这样做,他们为什么不把它发布到某个地方的github回购所以所有人都可以受益? (5认同)

Jam*_*mes 0

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

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

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