Error handling
As you saw in previous sections the DnsClient allows you to pass in a Handler which will be notified with an
AsyncResult once the query was complete. In case of an error it will be notified with a DnsException which will
hole a DnsResponseCode that indicate why the resolution failed. This DnsResponseCode
can be used to inspect the cause in more detail.
Possible DnsResponseCodes are:
-
NOERRORNo record was found for a given query -
FORMERRORFormat error -
SERVFAILServer failure -
NXDOMAINName error -
NOTIMPLNot implemented by DNS Server -
REFUSEDDNS Server refused the query -
YXDOMAINDomain name should not exist -
YXRRSETResource record should not exist -
NXRRSETRRSET does not exist -
NOTZONEName not in zone -
BADVERSBad extension mechanism for version -
BADSIGBad signature -
BADKEYBad key -
BADTIMEBad timestamp
All of those errors are "generated" by the DNS Server itself.
You can obtain the DnsResponseCode from the DnsException like:
DnsClient client = vertx.createDnsClient(53, "10.0.0.1");
client.lookup("nonexisting.vert.xio", ar -> {
if (ar.succeeded()) {
String record = ar.result();
System.out.println(record);
} else {
Throwable cause = ar.cause();
if (cause instanceof DnsException) {
DnsException exception = (DnsException) cause;
DnsResponseCode code = exception.code();
// ...
} else {
System.out.println("Failed to resolve entry" + ar.cause());
}
}
});