我想读一个存储在我的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)
永远不会得到任何要解析的数据,它只会得到一个空字符串。
答案 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数据。