Robin: Servlet empfängt nur Teilstream

Beitrag lesen

Eine Möglichkeit, aber nur, wenn auf beiden Rechnern für Tomcat und die Clients unterschiedliche Konfigurationen verwendet werden. Ich gehe aber davon aus, dass du bei deinen Tests identische verwendet hast.
Sind die Request-Nachrichten so lang, dass Timeout-Probleme theoretisch denkbar sind?

Auf dem Server läuft kein Tomcat. Es handelt sich dabei um ein SAP J2EE Engine 6.20, da gibt es einen Servlet Container in welchem das Servlet läuft. Um zu Testen ob das Servlet überhaupt in diesem Container läuft, hab ich eine doGet Methode geschrieben und mit einem Browser das Servlet aufgerufen das Funktioniert auch ohne Probleme.
Und wie schon gesagt wenn ich die Nachricht vom Server aus auf den Servlet Container sende funktioniert es ja auch.(Mit dem wfetch Tool. Ein Tool was Post Request erzeugen kann).

Die Nachricht Selbst sieht so aus :
<?xml version="1.0" ?>\r\n
<MESSAGE>\r\n
<REQUEST>\r\n
<DATA>Hallo XI\r\n
</DATA>\r\n
</REQUEST>\r\n
</MESSAGE>\r\n

das sollte eigendlich nicht zu lang sein.
Und wenn ich mit dem gleichen Tool die Nachrichten vom Server auf meinen Laptop (auf den Tomcat oder den SUN Appliation Server schicke) geht es auch.
Nur wenn ich mit dem Tool von meinem Laptop auf das Servlet im SAP J2EE Servlet Container eine NAchricht Schicke(POST REQUEST) bekomme im wfetch Tool den response :
<HTML><TITLE> SAP J2EE Engine/6.20</TITLE><BODY><H1>Internal Server Error 500!</H1><br><br><br><br><pre>java.io.IOException: Client lost or synchronization error! No data read for the timeout of 10000milliseconds.\r\n
\tat com.inqmy.services.httpserver.server.HttpInputStream.read(HttpInputStream.java:113)\r\n
\tat com.inqmy.services.servlets_jsp.server.ServletInputStreamImpl.read(ServletInputStreamImpl.java:121)\r\n
\tat com.inqmy.services.servlets_jsp.server.ServletInputStreamImpl.read(ServletInputStreamImpl.java:91)\r\n
\tat java.io.InputStreamReader.fill(InputStreamReader.java:168)\r\n
\tat java.io.InputStreamReader.read(InputStreamReader.java:244)\r\n
\tat java.io.BufferedReader.fill(BufferedReader.java:134)\r\n
\tat java.io.BufferedReader.readLine(BufferedReader.java:294)\r\n
\tat java.io.BufferedReader.readLine(BufferedReader.java:357)\r\n
\tat doorlock.Doorlock.doPost(Doorlock.java:72)\r\n

Wenn ich den Inputstream anders einlese im Servlet selbst und mit das ausgeben lasse was er eingelesen hat, kommt keine Fehlermeldung und in der Response stehen nur die paar Zeichen.

Die Meldung oben kommt weil ich mit folgendem code auf die Daten zugreifen will:

String inputString="";
  BufferedReader bufString = new BufferedReader(new InputStreamReader(request.getInputStream()));
for (String buf;(buf = bufString.readLine()) != null;inputString+=buf + "\n");

die Zeile for ist die Zeile 72 die den Fehler wirft im doorlock Servlet. Aber wie gesagt das ist nur der Folge Fehler weil er keine Daten im InputStream hat.

Sind Firewalls oder sonstige Protection-Systeme aktiv (hast Du vielleicht auf dem Laptop XP2 installiert?)? Wenn ja, schon einmal deaktiviert? Der "Port" wird ja vom OS zur Verfügung gestellt.

Firewalls etc. sind alle aus.

Die String-Fragmente, die ankommen, sind korrekt? Vielleicht gibt es auf dem Laptop-Clienten Enkodierungsprobleme, so dass auf dem Server Zeichen als "Stop"-Sequenzen (warum auch immer) erkannt werden.

Die Teile die ankommen sind von der Nachricht meistens die ersten 2 bis 5 Zeichen.
Also:
<?xml
oder
<?
so oder ähnlich sieht es aus.