Google AppEngine java.net.Socket受限制错误

时间:2011-12-17 13:54:49

标签: java php google-app-engine quercus

我在AppEngine上使用Quercus / PHP。当我用file_get_contents($url);运行一个简单的脚本时,我收到一个错误:

  

java.lang.NoClassDefFoundError:java.net.Socket是一个受限制的类。   有关详细信息,请参阅Google App Engine开发人员指南。

我用谷歌搜索了,虽然我发现其他人遇到了同样的错误,但原因似乎有所不同。你觉得这个错误对我有什么影响?

我正在使用最新的AppEngine Java SDK和最新的Quercus。

4 个答案:

答案 0 :(得分:2)

使用Google AppEngine / Java时,您无法真正访问完整的JVM:您的应用程序在受限制的沙箱中运行。请参阅此处的文档:

https://developers.google.com/appengine/docs/java/runtime?hl=en#The_Sandbox

根据此文档,您无法在此沙箱中打开套接字。这就是为什么它写的" java.net.Socket是一个受限制的类"。

答案 1 :(得分:2)

olivierlemasle是对的,但这是我经过一些搜索后发现的解决方案;在评论部分user "Phil" recommend

import java.net.URL;
define('URLFetchServiceFactory', new Java('com.google.appengine.api.urlfetch.URLFetchServiceFactory'));
$data = URLFetchServiceFactory->getURLFetchService()->fetch(new URL($url))->getContent();

经过测试,确实有效!

答案 2 :(得分:1)

对java.net.Socket的App Engine支持已开始在1.7.2上推出,现在正在接受可信的测试人员提交。

会有一些限制但它应该支持大多数用途。

注册在这里: https://docs.google.com/a/google.com/spreadsheet/viewform?formkey=dF9QR3pnQ2pNa0dqalViSTZoenVkcHc6MQ#gid=0

它很受欢迎,因此只会启用一小部分。

答案 3 :(得分:0)

根据api的主页(http://quercus.caucho.com/),它可以使用休眠。快速谷歌搜索给了我这个:GWT and Hibernate - NoClassDefFoundError when using Hibernate

它说hibernate不适用于谷歌应用引擎。也许这就是答案。