JsonpRequestBuilder访问谷歌网页时出现超时异常

时间:2013-10-17 01:57:12

标签: java gwt jsonp javascript-objects

所以我目前正在尝试使用JsonpRequestBuilder API来尝试访问远程文件,但我只是使用google网页链接进行测试,而且我收到了Timeout异常。不太清楚我在这里缺少什么。任何帮助将不胜感激。

package com.webapp.client;

import java.util.logging.Logger;

import com.webapp.client.ExcelFileJavascriptObject; import com.google.gwt.jsonp.client.JsonpRequestBuilder; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback;

public class DataHttpRequest {

private final String url2 = "http://www.google.ca";

private Logger logger = Logger.getLogger("DataRequest.java");

public void retrieveFile() {
    JsonpRequestBuilder builder = new JsonpRequestBuilder();

    builder.requestObject(url2,
            new AsyncCallback<ExcelFileJavascriptObject>() {

                @Override
                public void onFailure(Throwable caught) {
                    // TODO Auto-generated method stub
                    logger.severe(caught.getMessage());
                    logger.severe(caught.toString());
                }

                @Override
                public void onSuccess(ExcelFileJavascriptObject result) {
                    // TODO Auto-generated method stub
                    Window.alert(result.toString());
                }
            });
}

public void onModuleLoad() {
    retrieveFile();
}

private final String url2 = "http://www.google.ca"; private Logger logger = Logger.getLogger("DataRequest.java"); public void retrieveFile() { JsonpRequestBuilder builder = new JsonpRequestBuilder(); builder.requestObject(url2, new AsyncCallback<ExcelFileJavascriptObject>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub logger.severe(caught.getMessage()); logger.severe(caught.toString()); } @Override public void onSuccess(ExcelFileJavascriptObject result) { // TODO Auto-generated method stub Window.alert(result.toString()); } }); } public void onModuleLoad() { retrieveFile(); }

}

package com.webapp.client;

import com.google.gwt.core.client.JavaScriptObject;

public class ExcelFileJavascriptObject extends JavaScriptObject{ protected ExcelFileJavascriptObject(){

}

2 个答案:

答案 0 :(得分:1)

您违反了'Some Origin Policy'ajax限制。如果您的GWT应用程序部署在“http://www.google.ca”,我只能使用Ajax下载该文件,我想它不是,不是吗?

从其他域获取信息的唯一方法是:使用“JSONP”,就像您尝试使用的那样,或“CORS”,在这两种情况下,其他域都应该与您的应用程序,以便在您想要使用CORS的情况下设置适当的标头,或者如果您想要JSONP以便使用回调包装响应,那么您尝试请求的URL不会发生这种情况。

如果你想探索这两种方法,我为gwtquery项目写的Ajax page可能很有用。

答案 1 :(得分:0)

JSONP将JavaScript(使用<script>元素加载到绕过 SOP),其惯例是脚本只调用一个函数,该函数的名称在脚本URL的查询字符串中作为参数传递并且只需要一个参数。

这意味着您无法使用它来加载 Excel文件。

this post on the GWT forum中,您说要“将其他域中的Excel文件下载到GWT服务器上,然后再解析”。 如果要从服务器加载到服务器,请不要通过客户端:使用URLConnection或Apache HttpClient,JAX-RS 2客户端API(使用Resteasy或Jersey作为实现),OkHttp等。