Servlet socket error

Le
Frederic WOEHL
Salut à tous,

Dans une servlet, je dois me connecter (avec un HttpURLConnection) à un
autre server et poster des DATA (HTTP POST)
Sous TOMCAT ou WEBSPHERE, pas de problèmes tout marche très bien.
Sous BEA Weblogic 8.1, j'ai une exception lors de l'écriture des données
du POST.

Ce que je comprend du problème, c'est que l'écriture des datas arrive
trop tard et que la socket est déjà lu.
Ce que je ne comprend pas, c'est comment faire ? Tomcat et Websphere
ont-ils une tolérance sur un truc que je fait mal ?

Merci de vos lumières,
FRED


URL url = new URL( urlRequest ) ;
HttpURLConnection con = ( HttpURLConnection )url.openConnection( ) ;
con.setDoInput( true ) ;
con.setDoOutput( true ) ;
HttpURLConnection.setFollowRedirects( false ) ;
con.setUseCaches( false ) ;
try {
con.setRequestProperty( "Content-Type" , "
application/x-www-form-urlencoded" ) ;
con.setRequestProperty( "Content-Length" , postdatalen ) ;
ByteArrayOutputStream bs = new ByteArrayOutputStream(
postData.length( ) + 32 ) ;
PrintWriter pw = new PrintWriter( bs, true ) ;
pw.print( postData ) ;
pw.flush( ) ;
bs.writeTo( con.getOutputStream( ) ) ;
} catch( Exception e ) {
// pas de probleme sous TOMCAT ou Websphere
// sous BEA WEBLOGIC 8.1 : Exception: Software caused connection abort:
socket write error
}
}
con.getHeaderField( 0 ) ;
int codeRetour = con.getResponseCode( ) ;

Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Franck Andriano
Le #617575
Bonjour,

l'url active un cookie ?!
l'url active une ACL ?!

J'utilise les options suivantes sur l'objet HttpURLConnection :

urlc.setFollowRedirects(true) ;
urlc.setInstanceFollowRedirects(false);
urlc.setUseCaches(false);

urlc.setDoInput(true);
urlc.setDoOutput(true);

j'utilise un objet DataOutputStream en écriture sur la socket!
DataOutputStream out = new DataOutputStream(urlc.getOutputStream());
out.writeBytes(toEncodedString(map)); // map de paramètres supplémentaires...
out.flush();
out.close();

private String toEncodedString(HashMap map)
{
StringBuffer buf = new StringBuffer();
Iterator enumParam = map.keySet().iterator();
while (enumParam.hasNext())
{
String name = (String) enumParam.next();
String value = (String)map.get(name);
buf.append(URLEncoder.encode(name) + "=" + URLEncoder.encode(value));
if (enumParam.hasNext()) buf.append("&");
}
return buf.toString();
}

/Franck

--

Salut à tous,

Dans une servlet, je dois me connecter (avec un HttpURLConnection) à un
autre server et poster des DATA (HTTP POST)
Sous TOMCAT ou WEBSPHERE, pas de problèmes tout marche très bien.
Sous BEA Weblogic 8.1, j'ai une exception lors de l'écriture des données
du POST.

Ce que je comprend du problème, c'est que l'écriture des datas arrive
trop tard et que la socket est déjà lu.
Ce que je ne comprend pas, c'est comment faire ? Tomcat et Websphere
ont-ils une tolérance sur un truc que je fait mal ?


Frederic WOEHL
Le #617377
Merci de ta réponse.

C'est pareil, toujours bon sous Tomcat et Websphere
Toujours erreur sous Bea WebLogic 8.1 ( out.writeBytes génére un Exception:
Software caused connection abort: socket write error)

FRED

Franck Andriano wrote:

Bonjour,

l'url active un cookie ?!
l'url active une ACL ?!

J'utilise les options suivantes sur l'objet HttpURLConnection :

urlc.setFollowRedirects(true) ;
urlc.setInstanceFollowRedirects(false);
urlc.setUseCaches(false);

urlc.setDoInput(true);
urlc.setDoOutput(true);

j'utilise un objet DataOutputStream en écriture sur la socket!
DataOutputStream out = new DataOutputStream(urlc.getOutputStream());
out.writeBytes(toEncodedString(map)); // map de paramètres supplémentaires...
out.flush();
out.close();

private String toEncodedString(HashMap map)
{
StringBuffer buf = new StringBuffer();
Iterator enumParam = map.keySet().iterator();
while (enumParam.hasNext())
{
String name = (String) enumParam.next();
String value = (String)map.get(name);
buf.append(URLEncoder.encode(name) + "=" + URLEncoder.encode(value));
if (enumParam.hasNext()) buf.append("&");
}
return buf.toString();
}

/Franck

--

Salut à tous,

Dans une servlet, je dois me connecter (avec un HttpURLConnection) à un
autre server et poster des DATA (HTTP POST)
Sous TOMCAT ou WEBSPHERE, pas de problèmes tout marche très bien.
Sous BEA Weblogic 8.1, j'ai une exception lors de l'écriture des données
du POST.

Ce que je comprend du problème, c'est que l'écriture des datas arrive
trop tard et que la socket est déjà lu.
Ce que je ne comprend pas, c'est comment faire ? Tomcat et Websphere
ont-ils une tolérance sur un truc que je fait mal ?




Franck Andriano
Le #617375
Bonjour,

regarde http://edocs.bea.com/wls/docs81/notes/resolved.html#1410767

A+

/Franck

--

Merci de ta réponse.

C'est pareil, toujours bon sous Tomcat et Websphere
Toujours erreur sous Bea WebLogic 8.1 ( out.writeBytes génére un Exception:
Software caused connection abort: socket write error)

FRED



Frederic WOEHL
Le #622673
Salut,

Merci de l'info.
En effet, en désactivant le keep-alive sur le serveur HTTP sous-jacent, bea ne
fait plus d'erreur...

FRED

Franck Andriano wrote:

Bonjour,

regarde http://edocs.bea.com/wls/docs81/notes/resolved.html#1410767

A+

/Franck

--

Merci de ta réponse.

C'est pareil, toujours bon sous Tomcat et Websphere
Toujours erreur sous Bea WebLogic 8.1 ( out.writeBytes génére un Exception:
Software caused connection abort: socket write error)

FRED





Publicité
Poster une réponse
Anonyme