2012-01-17 11 views
2

自分のGWTプロジェクトとは別の場所にあるTomcatサーバーに格納されているXMLファイルを読みたいと思っています。これはどのようにして簡単に達成できますか?リモートプロシージャコールを行うべきですか?たぶんHTTP経由でJSONデータを取得していますか?私はthis pageを見ましたが、これが私の問題の解決策であるかどうか、あるいはRPCsのようなものがこれよりも難しいものになっているかどうかはわかりません。私はnewbですので、私はこのすべての間違っている場合は正しい方向に私を操縦してください。GWTを使用してXMLファイルを読み込む最も簡単な方法は何ですか?

XMLファイルの解析方法については、this pageを参照してください。私は解析を理解していますが、最初に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

戻ってくるステータスコード( 'resp.getStatusCode()')は何ですか?リクエストにボディが含まれていることを確認し、サーバーに送信してデータを返しますか? –

答えて

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(); 
} 

あなたはまだ問題が発生している場合は、応答のデバッグを開始。

+0

私はこれを試してみると、 ''着信RPC呼び出しをディスパッチしている間に '' [WARN]例外」と '' com.google.gwt.user.server.rpc.UnexpectedException:サービスメソッド ''というエラーが発生します。public abstract java.lang.String com .google.gwt.sample.client.GreetingService.readXML(java.lang.String)throw java.lang.IllegalArgumentException '予期しない例外がスローされました:java.lang.UnsatisfiedLinkError:com.google.gwt.http.client.URL.encodeImpl (Ljava/lang/String;)Ljava/lang/String; ' – Steph

+0

@Steph Ah。あなたはこの呼び出しをサーバー側にしています。サーバー上でGWTのURLクラスを使用することはできません。あなたがここで言及したURLは安全です。そのため、この場合はエンコードをスキップできます。ただし、より複雑なURLではエンコーディングが問題になる可能性があることに注意してください。 –

0

私はあなたがクロスサイトスクリプティングルールを悪用する可能性が高いと思います。

クライアント側のアプリケーションは、セキュリティとはまったく関係ない奇妙な歴史的な理由から、「ホームサイト」以外のホストからJSONデータを取得できますが、XMLデータを取得することはできません。

1

ファイルが実際にwar/Videos/testFile.xmlにあることを確認してください。そして、開発とデバッグのためのトリック、あなたのファイル名に+ "?uid=" + Math.random()を追加します。そうしないと、ブラウザはファイルをキャッシュして、常に同じ(この場合は空の)ファイルを提供します。

同じ起源の問題である可能性がありますが、ローカル(ポート8180上のサーバー)で実行する必要はありません。しかし、それがXMLとアプリケーションをフェッチするのと同じサーバーであることを確認してください。そうしないと、異なるポートで実行され、SOPの問題が発生します。