아래 코드에서 try 블록의 첫 번째 행에서 ConnectException이 throw되면 catch되지 않습니다. 원래의 예외 메시지 인 "Connection Refused"는 디버깅에 유용하지 않으므로이 예외를 다시 고려하므로 몇 가지 추가 정보를 추가하려고합니다. 그러나 "연결하지 못했습니다 ..."메시지가 표시되지 않습니다. 나는 원래 "Connection Refused"예외 메시지 만 보았습니다.스칼라의 스칼라 Try/Catch 블록이 예외를 catch하지 못함
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"))
}
}
내가 얻을 출력은 다음과 같습니다
내가 | 16 : 25 : 15.561 | ogsmessaging.MessageBusManager의 $ |부터 NATS java.net.ConnectException : 연결이 sun.nio에서 을 거부했다. ch.Net.connect0 (기본 방법) at sun.nio.ch.Net.connect (Net.java:454) at sun.nio.ch.Net.connect (Net.java:446) at sun.nio .ch.SocketChannelImpl.connect (SocketChannelImpl.java:648) at java.nio.channels.SocketChannel.open (SocketChannel.java:189) org.nats.Connection.connect (Connection.java:211) at org.nats.Connection. (Connection.java:164) at org.nats.Conn. (Conn.scala : 5) at org. nats.Conn $ .connect (Conn.scala : 68) org.genivi.sota.messaging.nats.NatsClient $$ anonfun $ getClient $ 1 $$ anonfun $ 적용 $ 3 $$ anonfun $ 적용 $ 4 $$ anonfun $ 적용 $ 5 $$ anonfun $ apply $ 6.apply (NatsClient.scala : 30)
catch 블록에있는 예외 메시지와 일치하지 않는 예외 메시지에 유의하십시오. NatsClient : 30은 catch 블록의 첫 번째 줄입니다.
위의 코드는 scala_nats를 사용하여 NATS 메시징 서버에 연결하려고합니다. 캐치 케이스를 Throwable로 변경해도 예외는 여전히 잡히지 않습니다. 그러나 try의 첫 번째 줄에 ConnectException을 throw하면 해당 예외가 catch됩니다. 나는 또한 루트을 내 수입에 추가하여 아무런 문제없이 네임 스페이스 충돌이 없는지 확인했습니다.
여기서 스칼라가 예외를 잡는 데 실패 할 수있는 상황은 무엇입니까?
어떻게 잡히지 않았다고 판단합니까? – Dima
원본 ConnectException에 "Connection Refused"메시지가 있습니다. 던진 예외에는 다른 문자열이 있지만 로그에서 "Connection Refused"만 볼 수 있습니다. – CalumMcCall
아마도 잡기 전에 기록 될 것입니까? – Dima