2009-07-31 14 views
7

Estoy usando gwt1.5, struts2, spring e hibernate. Estoy consiguiendo el error siguiente:GWT IllegalArgumentException: encodedRequest no puede estar vacío

ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project name] - Exception while dispatching incoming RPC call java.lang.IllegalArgumentException: encodedRequest cannot be empty 

Este error sólo se produce con IE, pero está funcionando perfectamente en Firefox.

Respuesta

3

Esto parece ser un problema de proxy en el que el servidor proxy está eliminando el cuerpo de la solicitud, consulte here.

Por otra parte, a partir de lo que he experimentado este problema sólo parece ocurrir cuando se utiliza IE7.0 IE6.0 y no

+0

Hola actualizaciones sobre este tema, me sale este error en IE6 – usman

2

Tengo el mismo error. Fue causado por una solicitud POST sin datos de Internet Explorer cuando se utilizó la autenticación NTLM.

Explicación está aquí:

solución era:

  • de usar WAFFLE SecurityFilter en Tomcat en MS Windows

    <filter> 
        <filter-name>MySecurityFilter</filter-name> 
        <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class> 
        <init-param> 
        <param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name> 
        <param-value> 
        NTLM 
        </param-value> 
        </init-param> 
    </filter> 
    <filter-mapping> 
        <filter-name>MySecurityFilter</filter-name> 
        <url-pattern>/appA/*</url-pattern> 
        <url-pattern>/appB/*</url-pattern> 
    </filter-mapping>` 
    
  • o, para establecer la clave de registro DisableNTLMPreAuth en un cliente.

    registry key: 
    HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet 
    Settings/ Value Name: DisableNTLMPreAuth 
    Data Type: REG_DWORD 
    Value: 1 
    
6

He hecho un gran trabajo de investigación en este en el último par de meses - antes de entrar en los detalles, mi aplicación web está utilizando GWT 2.x se ejecuta en Tomcat 7, con una Apache httpd 2.2.x y mod_jk 1.2.x setup en el frente.

Con mod_jk versión 1.2.26, de vez en cuando veo el error 'encodedRequest no puede estar vacío' en los registros. Como dice la pregunta, esto solo ocurrirá en IE, para mí solo IE8/9. El problema es que mi sistema operativo de servidor es Linux, por lo que no hay forma de que la autenticación NTLM sea el problema. En las versiones más recientes de mod_jk (1.2.37 al momento de escribir esto), en cambio, obtendría un tiempo de espera del socket y un error de lectura en los registros de Tomcat.

Este error se registraría durante una encuesta de mi aplicación web al servidor cada pocos segundos para obtener el estado de una operación de larga ejecución que se había iniciado en una secuencia separada. El sondeo ocurriría cada cinco segundos, pero de vez en cuando se colgaría mientras realizaba esta solicitud de estado.

Después de una gran cantidad de comandos tcpdump, encontré que la solicitud que colgaba vendría en una conexión TCP que Apache estaba restableciendo; se estaba enviando un FIN/ACK al navegador, el servidor recibiría el encabezado y el cuerpo de la solicitud POST, y el servidor continuaría restableciendo la conexión. Entonces, curiosamente, solo el encabezado volvería al servidor desde el navegador. Después de investigar un poco, me encontré esto:

Why does Internet Explorer not send HTTP post body on Ajax call after failure?

Al parecer, IE sólo enviará los encabezados durante la re-envío de la solicitud POST.De acuerdo con la verdadera moda de Microsoft, este problema ha sido conocido por un tiempo, se emitió e instaló una revisión, pero NO HABILITADO en la máquina cliente. Si no desea obligar a todos sus usuarios a editar su registro, debe deshabilitar HTTP Keep-Alive en su servidor o aumentar el tiempo de espera de Keep-Alive a> 60 segundos. Para mi servidor httpd de apache, configuro KeepAliveTimeout en 65 y MaxKeepAliveRequests en 0 para que el servidor no inicie restablecimientos de conexión en el navegador.

Cuestiones relacionadas