Der Webservice-Aufruf gibt den Fehler 500 zurück

8

Ich habe ein kleines Projekt in Java gestartet.
Ich muss einen Client erstellen, der xml als HTTP POST-Anfrage an eine URL sendet.
Ich probiere es mit java.net.* package (Im Folgenden ist das Stück Code), aber ich bekomme Fehler wie folgt:

%Vor%

Mein Code ist wie folgt:

%Vor%

Bitte helfen Sie mit geeigneten Beispielen oder anderen Möglichkeiten, dies zu tun.

Zeigen Sie Fehler / Fehler im obigen Code oder andere Möglichkeiten.

Mein Web Service ist im Frühling Rahmen

Das zu sendende

xml hat das String-Format: requestXml

    
sushil 01.03.2011, 08:08
quelle

5 Antworten

21

Das Problem liegt in unter dem Code

%Vor%

Da der Dienst möglicherweise nicht immer die richtige Antwort zurückgibt ... Wenn Sie einen Dienst über http aufrufen, kann es möglich sein, dass der Server selbst nicht verfügbar ist oder der Dienst nicht verfügbar ist. Daher sollten Sie immer nach dem Antwortcode suchen, bevor Sie die Antwort von Streams lesen. Anhand des Antwortcodes müssen Sie entscheiden, ob Sie ihn aus inputStream für eine Erfolgsantwort oder aus errorStream für eine Fehler- oder Ausnahmebedingung lesen.

%Vor%

Dies würde das Problem lösen

    
LuckyNandish 21.10.2012 20:38
quelle
3

Das Problem liegt in Ihrem Servercode oder der Serverkonfiguration:

  

10.5.1 500 Interner Serverfehler

     

Der Server hat eine unerwartete Bedingung festgestellt, durch die er die Anforderung nicht erfüllen konnte.

( w3c.org/Protocols )

Wenn der Server unter Ihrer Kontrolle ist (sollte es sein, wenn ich mir die URL [vor der Bearbeitung] anschaue), dann sehen Sie sich die Server-Logs an.

    
Andreas_D 01.03.2011 08:14
quelle
1

Nun, Sie sollten Ihre Streams und Verbindungen schließen. Automatische Ressourcenverwaltung von Java 7 oder Ссылка kann helfen. Dies ist jedoch wahrscheinlich nicht das Hauptproblem.

Das Hauptproblem ist, dass die serverseitige fehlschlägt. HTTP-Code 500 bedeutet serverseitiger Fehler. Ich kann Ihnen den Grund nicht sagen, weil ich den Serverseitenteil nicht kenne. Vielleicht sollten Sie sich das Protokoll des Servers ansehen.

    
v6ak 01.03.2011 08:14
quelle
1

Ich denke, Ihr Problem besteht darin, dass Sie den Eingabestream öffnen, bevor Sie den Ausgabestream geschrieben und geschlossen haben. Sicher tut das Sun-Tutorial das auch.

Wenn Sie den Eingabestream zu früh öffnen, wird der Ausgabestream möglicherweise automatisch geschlossen, sodass der Server eine leere POST-Anforderung sehen kann. Dies könnte ausreichen, um es zu verwirren und eine 500 Antwort zu senden.

Auch wenn dies nicht die Ursache für die 500 Fehler ist, ist es eine gute Idee, die Schritte in der im Tutorial beschriebenen Reihenfolge auszuführen. Wenn Sie die Antwort versehentlich lesen, bevor Sie mit dem Schreiben der Anforderung fertig sind, werden Sie wahrscheinlich die Verbindung (zumindest vorübergehend) sperren. (In der Tat sieht es so aus, als würde Ihr Code dies tun, weil Sie den Schreiber nicht schließen, bevor Sie den Reader lesen.)

Ein anderes Problem ist, dass Ihr Code die Verbindung nicht unter allen Umständen schließt und deshalb Netzwerkverbindungen verlieren kann. Wenn dies wiederholt geschieht, führt dies wahrscheinlich zu mehr IOExceptions.

    
Stephen C 01.03.2011 09:33
quelle
0

Wenn Sie einen externen Webservice aufrufen und einen JSON im REST-Aufruf übergeben, überprüfen Sie den Datentyp der übergebenen Werte.

Beispiel:

%Vor%

In diesem Beispiel wurde der Wert des Betrags als Zeichenfolge gesendet und der Webservice-Aufruf ist fehlgeschlagen, wenn der Server den HTTP-Antwortcode 500 zurückgegeben hat. Aber wenn die Menge: 16.0 gesendet wurde, d. H. Ein Integer wurde übergeben, ging der Anruf durch. Obwohl Sie während des Aufrufs solcher externen APIs auf die API-Dokumentation verwiesen haben, könnten kleine Details wie diese übersehen werden.

    
Pooja V 29.09.2017 11:31
quelle