2009-07-31 13 views
7

Sto usando gwt1.5, struts2, spring e hibernate. Sto ottenendo seguente errore:GWT IllegalArgumentException: encodedRequest non può essere vuoto

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

Questo errore si verifica solo con IE, ma è perfettamente funzionante in FireFox.

risposta

3

Questo sembra essere un problema di proxy in cui il server proxy sta eliminando il corpo della richiesta, vedere here.

Inoltre, da quello che ho sperimentato questo problema solo sembra verificarsi quando si utilizza IE7.0 e non IE6.0

+0

Ciao qualsiasi aggiornamento su questo problema per favore, sto ricevendo questo errore su IE6 stesso – usman

2

ho ottenuto lo stesso errore. È stato causato dalla richiesta POST senza dati da Internet Explorer quando è stata utilizzata l'autenticazione NTLM.

Spiegazione è qui:

soluzione era:

  • da usare WAFFLE SecurityFilter su Tomcat su 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, per impostare la chiave di registro DisableNTLMPreAuth su un client.

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

Ho fatto un sacco di ricerca in questo corso degli ultimi due mesi - prima di entrare nei dettagli, la mia applicazione web sta usando GWT 2.x in esecuzione su Tomcat 7, con una Davanti a Apache httpd 2.2.xe mod_jk 1.2.x.

Con la versione 1.2.26 di mod_jk, occasionalmente vedevo l'errore 'encodedRequest non può essere vuoto' nei registri. Come la domanda dice, questo accadrà solo in IE, per me solo IE8/9. Il problema è che il mio sistema operativo server è Linux, quindi non c'è modo che l'autenticazione NTLM possa essere il problema. Nelle versioni più recenti di mod_jk (1.2.37 al momento della stesura di questo documento), invece, dovrei ottenere un timeout del socket e leggere l'errore nei log di Tomcat.

Questo errore verrebbe registrato durante il polling della mia applicazione Web sul server ogni pochi secondi al fine di ottenere lo stato di un'operazione di lunga durata che era stata avviata in un thread separato. Il polling si sarebbe verificato ogni cinque secondi, ma occasionalmente si sarebbe bloccato durante questa richiesta di stato.

Dopo molti comandi di tcpdump, ho scoperto che la richiesta sospesa sarebbe arrivata su una connessione TCP che veniva ripristinata da Apache; un FIN/ACK veniva inviato al browser, l'intestazione della richiesta POST e il corpo venivano ricevuti dal server e il server continuava a ripristinare la connessione. Quindi, stranamente, solo l'intestazione sarebbe tornata sul server dal browser. Dopo la ricerca di un po ', ho trovato questo:

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

A quanto pare, IE inviare solo le intestazioni durante il re-invio della richiesta POST.In vero stile Microsoft, questo problema è stato conosciuto per un po ', è stato emesso un aggiornamento rapido e installato, ma NON ABILITATO sul computer client. Se non si desidera forzare tutti gli utenti a modificare il registro, è necessario disabilitare HTTP Keep-Alive sul server o aumentare il timeout Keep-alive a> 60 secondi. Per il mio server httpd di apache, sto impostando KeepAliveTimeout su 65 e MaxKeepAliveRequests su 0 in modo che il server non avvii le reimpostazioni di connessione al browser.

Problemi correlati