使用GWT读取XML文件的最简单方法是什么?

时间:2012-01-17 15:37:21

标签: javascript html xml gwt

我想读一个存储在我的Tomcat服务器上的XML文件,该文件位于与我的GWT项目不同的位置。这怎么容易实现?我应该进行远程过程调用吗?也许通过HTTP检索JSON数据?我看到了this page,但我不确定这是否是我的问题的解决方案,或者像RPC这样的东西使得这比它需要的更难。我是个新人,所以如果我说错了,请引导我朝着正确的方向前进。

我还查看了this page,它解释了如何解析XML文件。我理解解析,但我首先要弄清楚如何从服务器上获取XML文件。我试过这个:

try {
        new RequestBuilder(RequestBuilder.GET, 
                "http://localhost:8180/Videos/testFile.xml").
                sendRequest("", new RequestCallback() {

              @Override
              public void onResponseReceived(Request req, Response resp) {
                String text = resp.getText();
                // This method parses the XML file, but is never getting any data to parse
                parseMessage(text);
              }

              @Override
              public void onError(Request res, Throwable throwable) {
                // handle errors
                  System.out.println("Error occurred");
              }
            });
    } catch (RequestException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

但是当我尝试这个时,parseMessage(text)永远不会得到任何要解析的数据,它只会得到一个空字符串。

3 个答案:

答案 0 :(得分:2)

试试这个:

String url = "http://localhost:8180/Videos/testFile.xml";
// typically it would be a good idea to URL.encode(url);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
try {
    builder.sendRequest(null, new RequestCallback() {

          @Override
          public void onResponseReceived(Request req, Response resp) {
            String text = resp.getText();
            parseMessage(text);
          }

          @Override
          public void onError(Request res, Throwable throwable) {
            // handle errors
              System.out.println("Error occurred");
          }
        });
} catch (RequestException e) {
    e.printStackTrace();
}

如果您仍然遇到问题,请开始调试响应。

答案 1 :(得分:1)

确保您的文件确实位于war/Videos/testFile.xml。然后,开发和调试的技巧,将+ "?uid=" + Math.random()添加到您的文件名,否则您的浏览器可能会缓存该文件,总是给您相同的(在这种情况下为空)文件。

可能是同一个原始问题,但如果您在本地运行它(您的服务器在端口8180上),则不应该。但请确保它与您从中获取xml和应用程序的服务器相同,否则它们将在不同的端口上运行,从而导致SOP问题。

答案 2 :(得分:0)

我认为您可能会违反跨站点脚本规则。

由于与安全性无关的奇怪历史原因,客户端应用程序可以从其“主站点”以外的主机检索JSON数据,但它无法检索XML数据。