2012-01-17 4 views
2

내 GWT 프로젝트와 다른 위치에있는 Tomcat 서버에 저장된 XML 파일을 읽고 싶습니다. 어떻게하면 쉽게 달성 할 수 있습니까? 원격 프로 시저 호출을 작성해야합니까? HTTP를 통해 JSON 데이터를 가져 오는 중일 수 있습니까? 나는 this page을 보았지만 이것이 내 문제의 해결책인지 또는 RPC와 같은 것이 더 어려울 필요가 있는지 확신 할 수 없다. 나는 신이다. 그래서 내가 잘못 생각한다면 올바른 방향으로 나를 조종해라.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 호출을 디스패치하는 동안 예외가 발생했습니다. ''com.google.gwt.user.server.rpc.UnexpectedException : 서비스 메소드 'public abstract java.lang.String com .google.gwt.sample.client.GreetingService.readXML (java.lang.String) throws 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 문제가 발생합니다.

관련 문제