Wenn java.net.Socket.connect()
verwenden, die beide eine Verbindung verweigert und ein Timeout-Ergebnis in einem ConnectException
.Unterscheiden zwischen Verbindung abgelehnt und Verbindungszeitüberschreitung
java.net.ConnectException: Connection timed out: connect
java.net.ConnectException: Connection refused: connect
Wie kann ich sicher zwischen den beiden unterscheiden? Sicheres Parsen der Fehlermeldung erledigt den Job. Aber wenn sich die Nachricht in einer zukünftigen Java-Version ändert, habe ich kein Glück.
Das größere Bild: Ich schreibe einen Web-Service-Client mit JAX-WS mit einer Metro-Implementierung. Wenn ein Web-Service-Aufruf fehlschlägt, möchte ich den Grund für den Fehler klar melden, damit das Problem schnell behoben werden kann.
Ein Fallback ist eine akzeptable Lösung. –
Ich mag diese Antwort, aber behalte meinen früheren Vorschlag: abstrahiere es weg! Das letzte, was Sie wollen, ist eine Reihe von inkonsistenten und wiederholten Überprüfungen einer Schnittstelle, auf die Sie sich nicht verlassen können. Erstellen Sie eine für Sie sinnvolle Oberfläche und abstrahieren Sie die Details. Sie möchten nicht ein Dutzend Dateien bearbeiten, wenn sich etwas ändert. – riwalk