2012-03-03 3 views
13

GWT 응용 프로그램에서 서블릿으로 요청을 가져 오려고합니다. 코드를 컴파일 할 때 이러한 오류가 발생합니다.소스 코드를 사용할 수 없습니다. GWT 컴파일 오류

[ERROR] Line 16: No source code is available for type org.apache.http.client.ClientProtocolException; did you forget to inherit a required module? 
[ERROR] Line 16: No source code is available for type org.apache.http.ParseException; did you forget to inherit a required module? 
[ERROR] Line 16: No source code is available for type org.json.simple.parser.ParseException; did you forget to inherit a required module? 

이 오류를 제거하려면 어떻게해야합니까? GWT에서 이러한 클래스를 지원하지 않습니까? 나는 이것이 보통의 자바 프로젝트/콘솔 응용 프로그램에 사용하는 경우

다음

내가이 코드는 잘 작동

public String getJSON() throws ClientProtocolException, IOException, ParseException{ 
    HttpClient httpclient = new DefaultHttpClient(); 
    JSONParser parser = new JSONParser(); 
    String url = "some - url - can't disclose"; 
    HttpResponse response = httpclient.execute(new HttpGet(url)); 
    JSONObject json_data = (JSONObject)parser.parse(EntityUtils.toString(response.getEntity())); 
    JSONArray results = (JSONArray)json_data.get("result"); 
} 

사용하고있는 코드입니다.

답변

9

자바 코드는 GWT에서 실행은, 자바 스크립트에 GWT와 함께 작동하지 않습니다 JVM에서 작동 그래서 몇 가지 클래스를 변환됩니다. HttpClient 및 관련 클래스는 개방 소켓을 완벽하게 지원하는 JVM에서 작동하도록 작성되었으며 웹 브라우저에서는 허용되지 않으므로 이러한 클래스를 사용할 수 없습니다.

브라우저가 동일한 출발지 정책에 따라 사용중인 서버에 대한 연결을 열려면 url 및 HTTP 메소드와 선택적으로 헤더, 매개 변수, 데이터 등을 제공 할 수있는 RequestBuilder 클래스를 고려하십시오. 이 클래스는 JavaScript의 XmlHttpRequest 객체를 추상화 한 것으로, 일반 JS의 AJAX 요청에 일반적으로 사용됩니다.

9

* .gwt.xml 필요한 모듈을 상속해야합니다.

처럼 : <inherits name="module_name"/>

3

소스 코드를 제공하지 않는 한 GWT에서 에뮬레이트되지 않은 클래스는 클라이언트 측 코드에서 사용할 수 없습니다 (타사 라이브러리를 사용하려는 경우 불가능). 모든 에뮬레이션 JRE 클래스의

목록 : http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

는 GWT에서 크로스 사이트 요청을에이 포괄적 인 문서를 읽기 : 당신은 메이븐을 사용하는 경우 http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html

11

당신은이 작업을 수행 할 수 있습니다.

maven-gwt-plugincompileSourcesArtifacts은 모든 소스 관리 작업을 수행하며 GWT 모듈을 컴파일하도록합니다.

포함 할 모듈에 enable the generation of source package이 있어야합니다. 그리고 external GWT module example on Github을보십시오.

GWT는 자바 클래스를 자바 스크립트 클라이언트 코드로 컴파일 할 수 없습니다. 이 클래스는 여러 기본 클래스 만 지원합니다. GWT JRE Emulation Reference을 참조하십시오.

예제의 pom.xml :

나는 "어떤 소스 코드를 사용할 수 없습니다 ..."얻을 대화 상자에서 크롬에서 위의 답변과 함께, GWT 애플리케이션을로드하는 동안 나는이 다른 원인을 발견
<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <dependencies> 
     <dependency> 
      <groupId>com.my.group</groupId> 
      <artifactId>my-artifact</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 

    <!-- ... --> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>gwt-maven-plugin</artifactId> 
       <version>2.5.0</version> 
       <!-- ... --> 
       <configuration> 
        <compileSourcesArtifacts> 
         <compileSourcesArtifact>com.my.group:my-artifact</compileSourcesArtifact> 
        </compileSourcesArtifacts> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
0

:

  1. 즉, 내 서버 코드는 공유 또는 서버 패키지에없는 코드를 나타냅니다. 컴파일러는 불평하지 않지만 GWT는 오류 메시지를 표시하지 않습니다.)

  2. 클라이언트에서 서버로 전달할 클래스에 대해 매개 변수없는 생성자를 제공하는 것을 잊어 버렸습니다. (즉, 매개 변수를 사용하여 자체 생성자를 작성했기 때문에 기본 생성자가 없습니다.) GWT-RPC는 백그라운드에서이 클래스를 직렬화하고 deserialization에는 매개 변수없는 생성자가 필요합니다. 이것이 문제이며 다시 오류 메시지는 도움이되지 않으며 오해의 소지가 있습니다.

1

클라이언트 소스 코드는 서버 소스 코드를 참조 할 수 있습니다. 서버 소스 코드를 공유 패키지에 배치하십시오.

관련 문제