首先,我要感谢Google GData API工程师的出色工作,我想提一下这个问题并不是要批评任何事情.它只是指出了事情.
有人可以向我解释一下吗?据我所知,java的谷歌api客户端库的开发人员正在重新发明轮子.这就像为Java项目编写一个新的JDK,因为abdera客户端执行google api客户端库所做的事情,abdera服务器功能和适配器也可用于许多事情,例如入口持久性和许多其他事情.
我知道google数据协议是一个特定的原子发布,但如果需要使用Apache Abdera项目为此协议提供的一些花哨的扩展和功能,最好不要使用google api客户端库并且从头开始用Abdera实现客户端...而且我敢肯定,在很多情况下,它的功能,如Abdera的JCR适配器将变得非常方便谷歌文档,谷歌翻译工具包,实际上对大多数其他人.
现在很高兴有一个谷歌api客户端库用于谷歌文档,但我将如何处理文档和原子Feed响应?我相信在一半以上的案例中,另一方面也有一个存储库或数据库.在这种情况下,需要abdera,而不是简单的google api客户端,它们只是编组/解组订阅源...
事实上,所有的谷歌API都有一些东西要坚持下去.如果google决定将努力投入到Abdera增强或集成中,那将是有道理的......这不是......特别是考虑到软件开发中一个众所周知的事实,第二个版本通常是从头开始重写.Apache Abdera是一个成熟的项目,有5年的存在,被大量的应用程序使用.
如果有原因,我没有看到并实现使用pull解析器的客户端只是非常必要,我至少会使用一个不被弃用的xml pull解析器.Xmlpull.org已有6年历史,但尚未启用,甚至没有实现StAX api.stax.codehaus.org参考实现,JRE默认stax实现,Apache Axiom实现以及主要woodstox.codehaus.org实现会更好,为什么要避免规范和活动项目的支持和社区?
我向google api客户端java库的开发人员致歉,但我真的很喜欢google apis,但是使用这个客户端的第一个版本真的很痛苦,目前的版本很不错.但实际上浪费了很多时间主要是因为重新发明轮子以及从版本0到gdata-java-client到google-api-client-java的那些极端的版本间更改.
最后,谷歌在人们投入时间和金钱后限制API,所以为什么要关心,对吧?:-)
我收回了我所说的内容,从那时起软件和协议发生了很大变化......现在当GData支持JSON时,使用它甚至没有意义!
创建apache Abdera客户端失败
我的部分代码是
Abdera abdera = new Abdera();
AbderaClient abderaClient = new AbderaClient(abdera);
Run Code Online (Sandbox Code Playgroud)
这让我失望......
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.abdera.protocol.client.cache.LRUCacheFactory.<init>(org.apache.abdera.Abdera)
at org.apache.abdera.util.Discover.locate(Discover.java:37)
at org.apache.abdera.util.Discover.locate(Discover.java:21)
at org.apache.abdera.util.ServiceUtil.newInstance(ServiceUtil.java:142)
at org.apache.abdera.protocol.client.AbderaClient.initCacheFactory(AbderaClient.java:132)
at org.apache.abdera.protocol.client.AbderaClient.<init>(AbderaClient.java:108)
at org.apache.abdera.protocol.client.AbderaClient.<init>(AbderaClient.java:9
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:168)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
Caused by: java.lang.NoSuchMethodException: org.apache.abdera.protocol.client.cache.LRUCacheFactory.<init>(org.apache.abdera.Abdera)
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getConstructor(Class.java:1657) …Run Code Online (Sandbox Code Playgroud)