仅在localhost上使用Google App Engine 1.6.4上的Jsoup的ClassFormatError

时间:2012-04-02 10:34:43

标签: java google-app-engine localhost jsoup

在我的Google App Engine应用程序中,我使用了jsoup库(jsoup.org)。 我在Eclipse上安装了1.6.4的GAE SDK,代码只停止在localhost上运行。 appspot.com上的应用程序运行良好,如果我使用GAE 1.6.3,同样的应用程序在localhost中运行良好。

代码是(例如):

string = Jsoup.clean(string, Whitelist.none());

例外情况是:

java.lang.ClassFormatError: Invalid method Code length 73191 in class file org/jsoup/nodes/Entities

或(当我第二次执行代码时)

java.lang.NoClassDefFoundError: Could not initialize class org.jsoup.nodes.Entities$EscapeMode

有没有人有同样的问题?我该如何解决?

5 个答案:

答案 0 :(得分:3)

看看这个: http://www.4shared.com/folder/l8tNGCef/public.html

有2个文件: 一个固定的jsoup jar解决了这个问题 和源代码

答案 1 :(得分:1)

升级到GAE的1.6.4 SDK之后,我也发生了同样的事情。 造成这种例外的原因是

Document document = Jsoup.parse(html);

答案 2 :(得分:1)

很抱歉回答而不是评论! (我没有足够的声誉。) Yoav A提供的jsoup-1.6.2-GAE.jar非常出色但似乎有回归问题。 重现回归的程序如下

    String html = "<div>30&deg;C</div>";
    Document doc = Jsoup.parseBodyFragment(html);
    System.out.println(doc.toString());

当使用原始的jsoup-1.6.2.jar时,结果是OK。当使用jsoup-1.6.2-GAE.jar时,字符串'30°C'将变为乱码。

答案 3 :(得分:0)

我认为JVM限制约为(每个方法65,535字节),因此您可能必须将长实体类拆分为多个方法

答案 4 :(得分:0)

1.6.4版本到1.6.4.1有一个补丁可以解决此问题以及其他类加载和性能问题(http://code.google.com/p/googleappengine/issues/detail?id=7282)

最新的SDK链接: https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Java