2012-03-03 9 views
13

Estoy tratando de realizar solicitudes de un servlet en mi aplicación GWT. Al compilar el código, recibo estos errores.No hay código fuente disponible para el tipo: Error de compilación de 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? 

¿Qué debo hacer para eliminar estos errores? ¿GWT no admite estas clases?

siguiente es el código que estoy utilizando

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

Este código está funcionando bien Si yo uso esto en una aplicación habitual proyecto Java/consola.

Respuesta

9

código Java que se ejecuta en GWT se traduce en Javascript, por lo que algunas clases que trabajan en una JVM no funcionará con GWT. El HttpClient y las clases relacionadas se escriben para trabajar en una JVM con soporte completo para abrir sockets, algo que no está permitido en un navegador web, por lo que estas clases no se pueden usar.

Para abrir una conexión al servidor que está utilizando (sujeto a la Política de Same Origin del navegador), considere la clase RequestBuilder, que le permite proporcionar una url y un método HTTP, y opcionalmente encabezados, parámetros, datos, etc. Esta clase es una abstracción del objeto XmlHttpRequest en JavaScript, comúnmente utilizado para solicitudes AJAX en JS simple.

9

Tienes que heredar en tu * .gwt.xml módulo (s) necesario (s).

igual: <inherits name="module_name"/>

11

Si utiliza Maven entonces usted puede hacer esto.

maven-gwt-plugin con el parámetro compileSourcesArtifacts hará todo el trabajo de gestión de fuentes y le permitirá compilar el módulo GWT.

En el módulo que desea incluir, tendrá que enable the generation of source package. Y echa un vistazo al external GWT module example on Github.

GWT no puede compilar ningún código de cliente de clase Java a JavaScript. Solo admite varias clases base. Ver GWT JRE Emulation Reference.

Ejemplo pom.xml:

<?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

Cuando llego a "ningún código fuente está disponible ..." en un cuadro de diálogo en Chrome durante la carga de una aplicación GWT, junto con las respuestas anteriores me encontré con otros 2 causas :

  1. Significa que mi código de servidor se refiere a código que no está en los paquetes compartidos o de servidor. (El compilador no se queja, pero GWT sí. Desafortunadamente, el mensaje de error NO es útil.)

  2. Me olvidé de suministrar un constructor sin parámetros para una clase que estoy pasando desde el cliente al servidor. (Es decir, escribí mi propio constructor CON un parámetro, por lo que no hay un constructor predeterminado.) GWT-RPC está serializando esta clase en segundo plano y la deserialización requiere un constructor sin parámetros. Entonces ese es el problema, y ​​de nuevo, el mensaje de error no ayuda y es engañoso.

1

El código fuente de su cliente puede referirse a un código fuente del servidor. Intenta colocar el código fuente de tu servidor en un paquete compartido.

Cuestiones relacionadas