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:
def client = vertx.createDnsClient(53, "8.8.8.8");
client.lookup("missing.vertx.io", { ar ->
if (ar.succeeded()) {
def record = ar.result();
println "record: " + record;
} else {
def cause = ar.cause();
if (cause instanceof DnsException) {
def code = cause.code();
println "Code : " + code
// ...
} else {
println("Failed to resolve entry" + ar.cause());
}
}
})