Wenn im folgenden Code eine ConnectException von der ersten Zeile innerhalb des try-Blocks ausgelöst wird, wird sie nicht abgefangen. Ich wiederhole die Ausnahme, da die ursprüngliche Ausnahmebedingungsnachricht "Connection Refused" zum Debuggen nicht hilfreich ist. Daher füge ich weitere Informationen hinzu. Meine Ausnahme mit der Meldung "Verbindung fehlgeschlagen ..." wird jedoch nie angezeigt. Ich sehe immer nur die ursprüngliche "Connection Refused" Exception-Nachricht.Scala Try/Catch-Block in Scala schlägt fehl Exception
private[this] def getClient(system: ActorSystem, config: Config): ConfigException Xor Conn =
for {
natsConfig <- config.configAt("messaging.nats")
userName <- natsConfig.readString("user")
password <- natsConfig.readString("password")
host <- natsConfig.readString("host")
port <- natsConfig.readString("port")
} yield {
val props = new Properties()
props.put("servers", "nats://" + userName + ":" + password + "@" + host + ":" + port)
log.debug("NATS connection properties:" + props.getProperty("servers"))
try {
val client = Conn.connect(props)
system.registerOnTermination {
client.close()
}
client
} catch {
case ex:ConnectException =>
throw new ConnectException("Failed to connect to nats using props:" + props.getProperty("servers"))
}
}
Der Ausgang ich erhalte, ist:
I | 16: 25: 15,561 | ogsmessaging.MessageBusManager $ | Start NATS java.net.ConnectException: Anschluss bei sun.nio abgelehnt. ch.Net.connect0 (Native Methode) bei sun.nio.ch.Net.connect (Net.java:454) bei sun.nio.ch.Net.connect (Net.java:446) bei sun.nio .ch.SocketChannelImpl.connect (SocketChannelImpl.java:648) unter java.nio.channels.SocketChannel.open (SocketChannel.java:189) bei org.nats.Connection.connect (Connection.java:211) bei org.nats.Connection. (Connection.java:164) bei org.nats.Conn. (Conn.scala: 5) bei org. nat.Conn $ .connect (Conn.scala: 68) bei org.genivi.sota.messaging.nats.NatsClient $$ anonfun $ getClient $ 1 $$ anonfun $ anwenden $ 3 $$ anonfun $ anwenden $ 4 $$ anonfun $ anwenden $ 5 $$ anonfun gelten $ $ 6.Apply (NatsClient.scala: 30)
Beachten Sie die Ausnahmemeldung, die nicht mit der im catch-Block entspricht. NatsClient: 30 ist die erste Zeile des Catch-Blocks
Der obige Code versucht, eine Verbindung zu einem NATS-Messaging-Server mit scala_nats herzustellen. Selbst wenn ich den Catch-Fall in Throwable ändere, wird die Ausnahme immer noch nicht abgefangen. Wenn ich jedoch eine ConnectException in die erste Zeile des Befehls try, wird diese Ausnahme abgefangen. Ich habe auch versucht, root zu meinen Importen hinzuzufügen, um sicherzustellen, dass es keine Namensraumkonflikte gibt, ohne Erfolg.
Unter welchen Umständen kann Scala Ausnahmen hier nicht abfangen?
Wie stellen Sie fest, dass es nicht gefangen wird? – Dima
Die ursprüngliche ConnectException hat die Meldung "Verbindung abgelehnt". Die Ausnahme, die ich geworfen habe, hat eine andere Zeichenfolge, aber ich sehe nur "Verbindung abgelehnt" in den Protokollen. – CalumMcCall
Vielleicht wird es protokolliert, bevor Sie es fangen? – Dima