看起来GAE选择了JDK 1.6类的子集,如下所示:
Google App Engine JDK white list
这是非常不幸的,因为人们会在最常见的java库中获得类链接错误,这些java库处理数据绑定,反射,类加载和注释 . 虽然有些遗漏可能是针对已弃用或遗留的东西,但还有一些遗漏不是 . 我特别关注的是流式拉解析器(javax.xml.stream . *),它经过长时间的延迟(API与JDK 1.4大致同时完成)后才被添加到JDK 1.6中 . 省略这一点使得进行可扩展的高性能xml处理变得更加困难 .
我理解的问题是,不仅缺少类,而且由于安全性限制,甚至无法添加它们 .
所以:这是一个开放式的哲学问题,可能只是GAE开发人员可以肯定地回答但是......为什么有些API从标准的JDK 1.6中掉线,看似随意?
UPDATE :
快速说明:感谢您的回答 . 对于它的 Value 我真的不知道安全性与不包括javax.xml.stream有什么关系 . 安全方面与许多其他事情相关(例如,我不需要线程,并且可以看出它们为什么会出局),所以这是可以理解的样板答案;只是不适用于这一个 .
Stax API只是一组接口和抽象的大声呼喊 . 但更重要的是,它与SAX,DOM和JAXP接口具有完全相同的分支 - 已经包含在内!
但看起来这个问题已经引起谷歌开发者的注意:
discussion on whitelisting Stax API
所以这里希望能够迅速解决这个问题和类似问题 .
3 回答
GAE在托管环境中运行,其中包含不受信任(可能是恶意)的客户端,这些客户端通常可以免费访问 .
在这种类型的环境中,安全性是一个非常高的问题,具有文件系统访问权限的API受到非常严格的审查 . 我认为这就是为什么他们选择以他们允许的方式开始时相当保守 .
但是,当安全问题得到解决(并且基于需求)时,如果有更多的课程进入白名单,这一点都不会让我感到惊讶 .
但我甚至不希望获得线程工具,例如 .
这些东西是随意丢弃的,这是非常值得怀疑的 . GAE在一个极其安全敏感的环境中运行,并且对类库的内部审计发现Google不愿意承担一些风险的可能性很大 .
至于您的高性能流式XML解析器,您可以尝试查找适当的库(jar文件) . 除非它依赖于线程或文件访问(或黑名单API),否则它应该与JDK中的一样好用 .
有很多(相当复杂)libraries that work on GAE .