尝试获取Google日历服务时出错

时间:2014-09-11 09:07:54

标签: java google-app-engine google-calendar-api guava

我正在开发一个 AppEngine应用程序,我需要使用 Google Calendar API 。由于某些原因,我们没有使用此API的最新版本(v3),而且我们正在使用 gdata-calendar-v2 ,这仍然有效,直到明年11月。

好的,我有两种使用Calendar Service的方法。一方面,我在我的日历上添加了一个新事件,我做了类似的事情:

CalendarService myService =  new CalendarService("my_calendar"); // error on this line   
myService.setUserCredentials(EMAIL, PASSWORD);

据我所知,工作正常,我在日历上添加了新活动,没有任何问题。

另一方面,我有另一种方法,我做了不同的事情,但我使用相同的代码段连接到Google日历。在这种情况下,我收到此错误:

Caused by: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet;
  at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableTypes(AltFormat.java:399)
  at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableXmlTypes(AltFormat.java:387)
  at com.google.gdata.wireformats.AltFormat.<clinit>(AltFormat.java:49)
  at com.google.gdata.client.Service.<clinit>(Service.java:558)

我正在使用-collections-的库,你可能感兴趣的是:

  • Guava 11(我已经更新到18,它也是同样的问题)。

我知道有一个非常相似的线程有同样的问题right here但是有一个区别:它在我的项目的一个方法中正常工作而在另一个方法中工作不正常。

你能帮助我吗?

提前谢谢你, 迭。

解决方案:

我一直在谷歌搜索,我发现了这个thread 我已将我的番石榴改为guava-10.0.1.jar,我不会再出现此错误。

  

java的gdata客户端库的最新版本(撰写本文时版本1.46.0,在此处找到:https://code.google.com/p/gdata-java-client/downloads/list)仍在其依赖项中嵌入google-collections-1.0-rc1.jar,并在此处指出它无法被最新的番石榴版本取代。

1 个答案:

答案 0 :(得分:3)

您很可能会使用两种不同版本的番石榴。添加行

System.out.println(ImmutableSet.class.getClass().getResource("/"));

到异常之前的行,找出冲突版本所在的位置。


目前的番石榴有method

public static <E> ImmutableSet<E> copyOf(E[] elements) {}

某些旧版本(例如Google集合)do not。它看起来像

com.google.gdata.wireformats.AltFormat$Builder

访问旧版本。