Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Servlet socket error

4 réponses
Avatar
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( ) ;
...
...

4 réponses

Avatar
Franck Andriano
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 ?


Avatar
Frederic WOEHL
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 ?




Avatar
Franck Andriano
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



Avatar
Frederic WOEHL
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