仅在本地主机上在Google App Engine 1.6.4上使用Jsoup的ClassFormatError

问题描述:

在我的Google App Engine应用程序中,我使用jsoup库(jsoup.org)。 我在Eclipse上安装了GAE的1.6.4 SDK,代码仅在本地主机上停止工作。如果我使用GAE 1.6.3,appspot.com上的应用程序运行良好,并且相同的应用程序在localhost中运行良好。仅在本地主机上在Google App Engine 1.6.4上使用Jsoup的ClassFormatError

的代码是(例如):

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 

有谁有同样的问题?我该如何解决它?

我认为JVM极限是约(每方法65,535字节),所以你可能要拆()长实体类成多个方法

同样的事情发生在我升级到1.6.4 SDK后的GAE。 是什么原因造成的异常对我来说是

Document document = Jsoup.parse(html); 

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

有2个文件: 固定jsoup罐子,解决了这个问题 和源代码

+0

你已经保存了我的一天:) – 2012-05-04 07:17:07

有是针对1.6.4.1发布到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

对不起,我回答,而不是评论! (我没有足够的声望。) 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'会变成乱码。

+0

检查出GitHub Jsoup项目[链接](https://github.com/jhy/jsoup) 有一个版本1.6.3 [PENDING]与我的修复程序。 我认为这个版本适合你 – 2012-05-19 13:29:11