1

我有一个与 Spring MVC 集成的 GWT Web 应用程序。我有一个工作完美的控制器,并且经过单元测试以接受 POST 的 JSON 数据并返回 JSON 数据。

在同一个应用程序中,为避免任何 SOP 跨站点域问题,我正在使用 RequestBuilder 进行调用以发布相同的 json 数据,并且我希望返回 JSON 数据。

我创建了一个应该进行调用的基本 java 类,但我有一些问题。这个正在运行的 Web 应用程序在 Eclipse 的 Jetty 中以托管模式运行。我已经对 GWT 如何通过简单的 HTP 请求调用现有的 Web 服务进行了大量研究。

我的单元测试的第一个问题是:

String baseUrl = GWT.getModuleBaseURL();

不工作,我得到:

java.lang.UnsatisfiedLinkError: com.google.gwt.core.client.impl.Impl.getModuleBaseURL()Ljava/lang/String;

我想我知道正确的 URL 应该是什么,所以当我正确地对 url 进行硬编码并执行此代码时:

    String url = getRootUrl() + "rest/pendingInvoices/searchAndCount";
    System.out.println("PendingInvoiceDataSource: getData: url=" + url);

    // Send request to server and catch any errors.
    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url);

    builder.setHeader("Accept", "application/json");
    builder.setHeader("Content-type", "application/json");

    // builder.setRequestData(requestData);

    try
    {
        System.out.println("PendingInvoiceDataSource: SEND REQUEST: getData: requestData=" + requestData);
        Request request = builder.sendRequest(requestData, new RequestCallback()
        {
            public void onError(Request request, Throwable exception)
            {
                System.out.println("Couldn't retrieve JSON");
            }

            @Override
            public void onResponseReceived(Request request, Response response)
            {
                if (200 == response.getStatusCode())
                {
                    // updateTable(JsonUtils.safeEval(response.getText()));
                    System.out.println("data=" + response.getText());
                }
                else
                {
                    System.out.println("Couldn't retrieve JSON (" + response.getStatusText() + ")");
                }
            }
        });
    }
    catch (RequestException e)
    {
        System.out.println("Couldn't retrieve JSON");
    }

我在他的 sendRequest 上收到此错误:

java.lang.UnsatisfiedLinkError: com.google.gwt.xhr.client.XMLHttpRequest.create()Lcom/google/gwt/xhr/client/XMLHttpRequest;
at com.google.gwt.xhr.client.XMLHttpRequest.create(Native Method)
at com.google.gwt.http.client.RequestBuilder.doSend(RequestBuilder.java:383)
at com.google.gwt.http.client.RequestBuilder.sendRequest(RequestBuilder.java:261)

我认为这可能是一个快速修复,或者可能是我忘记的一些小问题,所以我会尝试更多测试,看看我能找到什么。

4

2 回答 2

1

GWT 中的所有client内容都只意味着在客户端运行:编译为 JS 或在 DevMode 中。

只有shared,servervm类可以在服务器端使用。

如果您想获取您的服务器 URL,请使用来自HttpServletRequest(或 Spring MVC 中的任何方法,从您如何标记您正在使用的问题看来)中的适当方法。

如果您想从您的服务器发出 HTTP 请求,请使用HttpURLConnectionOkHttpApache Http 组件或类似的库,甚至是Spring 自己的 HTTP 客户端 API

于 2013-08-28T08:26:49.943 回答
0

实际上,只有单元测试有问题。一旦我真正尝试运行已部署的代码,一切都会奏效。我仍然会按照建议尝试 h GWTTestCase 以使单元测试正常工作。

但是当我运行部署的代码时一切正常。

我也改变了: String baseUrl = GWT.getModuleBaseURL(); 这给了我:

             http://localhost:8888/MyProject

收件人:字符串 baseUrl = GWT.getHostPageBaseURL(); 这给了我:

              http://localhost:8888/

这一切都奏效了。

于 2013-08-28T13:07:33.757 回答