public static void createARecords(AmazonRoute53Client client) { ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest(); request.setHostedZoneId("Z6C671E6E1A044F6695AD50EE258D8BAE"); ChangeBatch changeBatch = new ChangeBatch(); Collection<Change> changes = new LinkedList<Change>(); for (int i = 1; i < 151; ++i) { Change change = new Change(); change.setAction(ChangeAction.CREATE); ResourceRecordSet rrs = new ResourceRecordSet(); rrs.setType(RRType.A); rrs.setTTL(900L); rrs.setName("inst-" + i + ".msicluster.momentumsoftware.com"); Collection<ResourceRecord> rr = new LinkedList<ResourceRecord>(); ResourceRecord e = new ResourceRecord(); e.setValue("172.31.253." + i); rr.add(e); rrs.setResourceRecords(rr); change.setResourceRecordSet(rrs); changes.add(change); } changeBatch.setChanges(changes); request.setChangeBatch(changeBatch); client.changeResourceRecordSets(request); }
public static void createCNAMERecords(AmazonRoute53Client client) { ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest(); request.setHostedZoneId("Z9366F3515BBA46B2AA8C86B1D6DF0311"); ChangeBatch changeBatch = new ChangeBatch(); Collection<Change> changes = new LinkedList<Change>(); Change change = new Change(); change.setAction(ChangeAction.CREATE); ResourceRecordSet rrs = new ResourceRecordSet(); rrs.setType(RRType.CNAME); rrs.setTTL(900L); rrs.setName("devessex.essex.momentumsoftware.com"); Collection<ResourceRecord> rr = new LinkedList<ResourceRecord>(); ResourceRecord e = new ResourceRecord(); e.setValue("inst-5.essex.momentumsoftware.com"); rr.add(e); rrs.setResourceRecords(rr); change.setResourceRecordSet(rrs); changes.add(change); changeBatch.setChanges(changes); request.setChangeBatch(changeBatch); client.changeResourceRecordSets(request); }
public static void testChangeResourceRecordSets(AmazonRoute53Client client) { ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId("Z3HKYAOP6P7EX7"); ChangeBatch batch = new ChangeBatch(); Collection<Change> changes = new LinkedList<Change>(); Change change = new Change(); change.setAction("DELETE"); ResourceRecordSet rrSet = new ResourceRecordSet(); rrSet.setName("www.examplethatshouldntbequeried.com."); rrSet.setType("A"); rrSet.setTTL(300L); rrSet.setWeight(1L); Collection<ResourceRecord> rrs = new LinkedList<ResourceRecord>(); ResourceRecord e = new ResourceRecord(); e.setValue("172.31.255.2"); rrs.add(e); rrSet.setResourceRecords(rrs); rrSet.setSetIdentifier("1"); rrSet.setTTL(300L); change.setResourceRecordSet(rrSet); changes.add(change); batch.setChanges(changes); req.setChangeBatch(batch); client.changeResourceRecordSets(req); }
@Override public String getCurrentIP() { ResourceRecordSet set = getCurrentRecordSet(); if (set != null && set.getResourceRecords() != null && set.getResourceRecords().size() > 0) { ResourceRecord rr = set.getResourceRecords().get(0); if (rr != null) { return rr.getValue(); } } return null; }
public static ResourceRecordSet generateResourceRecordSetForARecord(String publicIp, String domain) { ArrayList<ResourceRecord> resourceRecords = new ArrayList<>(); ResourceRecord resourceRecord = new ResourceRecord().withValue(publicIp); resourceRecords.add(resourceRecord); ResourceRecordSet resourceRecordSet = new ResourceRecordSet(); resourceRecordSet.setTTL(300L); resourceRecordSet.setName(domain); resourceRecordSet.setType(RRType.A); resourceRecordSet.setResourceRecords(resourceRecords); return resourceRecordSet; }
@Override public String getCurrentIP() { ResourceRecordSet set = getCurrentRecordSet(); if (set!=null && set.getResourceRecords() != null && set.getResourceRecords().size() > 0){ ResourceRecord rr = set.getResourceRecords().get(0); if(rr!=null){ return rr.getValue(); } } return null; }
/** * TODO: assumes exactly one A record for record set * @param recordSetName * @return value for A record of record set */ private String getCurrentAValue(final String recordSetName) { final ListResourceRecordSetsRequest listResourceRecordSetsRequest = new ListResourceRecordSetsRequest() .withHostedZoneId(hostedZoneId) .withMaxItems("1") .withStartRecordName(recordSetName); ListResourceRecordSetsResult listResourceRecordSetsResult = execWithRetries(new Callable<ListResourceRecordSetsResult>() { @Override public ListResourceRecordSetsResult call() throws Exception { return route53.listResourceRecordSets(listResourceRecordSetsRequest); } }); List<ResourceRecordSet> resourceRecordSets = listResourceRecordSetsResult.getResourceRecordSets(); if (resourceRecordSets.isEmpty()) { throw new IllegalStateException("Could not find any resource record sets for \"" + recordSetName + "\" in hosted zone \"" + hostedZoneId + "\""); } for (ResourceRecordSet resourceRecordSet : resourceRecordSets) { if (RRType.valueOf(resourceRecordSet.getType()) == RRType.A) { List<ResourceRecord> resourceRecords = resourceRecordSet.getResourceRecords(); if (resourceRecords.isEmpty()) { throw new IllegalStateException("Could not find any A records for set \"" + resourceRecordSet.getName() + "\" in hosted zone \"" + hostedZoneId + "\""); } return resourceRecords.get(0).getValue(); } } throw new IllegalStateException("Could not find any A records for record set \"" + recordSetName + "\""); }
private void updateAValue(final String recordSetName, final String newValue) { ResourceRecord resourceRecord = new ResourceRecord() .withValue(newValue); ResourceRecordSet resourceRecordSet = new ResourceRecordSet() .withName(recordSetName) .withType(RRType.A) .withTTL(TTL) .withResourceRecords(Collections.singleton(resourceRecord)); Change deleteChange = new Change() .withAction(ChangeAction.DELETE) .withResourceRecordSet(resourceRecordSet); Change createChange = new Change() .withAction(ChangeAction.CREATE) .withResourceRecordSet(resourceRecordSet); ChangeBatch changeBatch = new ChangeBatch() .withChanges(deleteChange, createChange); final ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest() .withHostedZoneId(hostedZoneId) .withChangeBatch(changeBatch); execWithRetries(new Callable<Void>() { @Override public Void call() throws Exception { route53.changeResourceRecordSets(changeResourceRecordSetsRequest); // TODO - poll until the change as propagated? return null; } }); }
@Test public void changeResourceRecordSets0() { String batchComment = "I have no idea what I'm doing."; ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId(getZoneId(zoneName0)); ChangeBatch batch = new ChangeBatch(); batch.setComment(batchComment); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord() .withValue("172.31.255.235"); changes.add(new Change().withAction("CREATE").withResourceRecordSet( new ResourceRecordSet().withName("www." + zoneName0) .withType("A").withTTL(300L) .withResourceRecords(resourceRecord))); batch.setChanges(changes); req.setChangeBatch(batch); ChangeResourceRecordSetsResult result = customDNS53Client .changeResourceRecordSets(req); assertNotNull(result); assertNotNull(result.getChangeInfo()); assertNotNull(result.getChangeInfo().getId()); assertNotNull(result.getChangeInfo().getStatus()); assertNotNull(result.getChangeInfo().getSubmittedAt()); System.out.println(result); }
@Test public void changeResourceRecordSets1() { String batchComment = "I have no idea what I'm doing."; ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId(getZoneId(zoneName0)); ChangeBatch batch = new ChangeBatch(); batch.setComment(batchComment); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord() .withValue("172.31.255.235"); ResourceRecord resourceRecord2 = new ResourceRecord() .withValue("172.31.255.254"); changes.add(new Change().withAction("CREATE").withResourceRecordSet( new ResourceRecordSet().withName("w2." + zoneName0) .withType("A").withTTL(300L) .withResourceRecords(resourceRecord, resourceRecord2))); batch.setChanges(changes); req.setChangeBatch(batch); ChangeResourceRecordSetsResult result = customDNS53Client .changeResourceRecordSets(req); assertNotNull(result); assertNotNull(result.getChangeInfo()); assertNotNull(result.getChangeInfo().getId()); assertNotNull(result.getChangeInfo().getStatus()); assertNotNull(result.getChangeInfo().getSubmittedAt()); System.out.println(result); }
@Test public void changeResourceRecordSets2() { String batchComment = "Now I know what I'm doing. Kind of..."; ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId(getZoneId(zoneName0)); ChangeBatch batch = new ChangeBatch(); batch.setComment(batchComment); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord() .withValue("172.31.255.235"); ResourceRecord resourceRecord2 = new ResourceRecord() .withValue("172.31.255.254"); changes.add(new Change().withAction("DELETE").withResourceRecordSet( new ResourceRecordSet().withName("w2." + zoneName0) .withType("A").withTTL(300L) .withResourceRecords(resourceRecord, resourceRecord2))); batch.setChanges(changes); req.setChangeBatch(batch); ChangeResourceRecordSetsResult result = customDNS53Client .changeResourceRecordSets(req); assertNotNull(result); assertNotNull(result.getChangeInfo()); assertNotNull(result.getChangeInfo().getId()); assertNotNull(result.getChangeInfo().getStatus()); assertNotNull(result.getChangeInfo().getSubmittedAt()); System.out.println(result); }
@Test public void changeResourceRecordSets3() { String batchComment = "I definitely know what I'm doing."; ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId(getZoneId(zoneName0)); ChangeBatch batch = new ChangeBatch(); batch.setComment(batchComment); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord() .withValue("172.31.255.235"); changes.add(new Change().withAction("DELETE").withResourceRecordSet( new ResourceRecordSet().withName("www." + zoneName0) .withType("A").withTTL(300L) .withResourceRecords(resourceRecord))); batch.setChanges(changes); req.setChangeBatch(batch); ChangeResourceRecordSetsResult result = customDNS53Client .changeResourceRecordSets(req); assertNotNull(result); assertNotNull(result.getChangeInfo()); assertNotNull(result.getChangeInfo().getId()); assertNotNull(result.getChangeInfo().getStatus()); assertNotNull(result.getChangeInfo().getSubmittedAt()); System.out.println(result); }
@Test public void testChangeResourceRecordSets0(){ /*ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId("Z5A748ACB59134595AAF7FD013A0F4D72"); ChangeBatch batch = new ChangeBatch(); batch.setComment("I have no idea what I'm doing."); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord().withValue("172.31.255.1"); ResourceRecord resourceRecord2 = new ResourceRecord().withValue("172.31.255.2"); changes.add(new Change().withAction("CREATE").withResourceRecordSet( new ResourceRecordSet().withName("www.example-dkim2.com").withType("A").withTTL(300L).withResourceRecords(resourceRecord, resourceRecord2))); batch.setChanges(changes); req.setChangeBatch(batch);*/ ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId("ZB20159C9F447440CA75A34B7AAB1BFFA"); ChangeBatch batch = new ChangeBatch(); batch.setComment("I have no idea what I'm doing."); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord().withValue("172.31.255.1"); ResourceRecord resourceRecord2 = new ResourceRecord().withValue("172.31.255.2"); changes.add(new Change().withAction("CREATE").withResourceRecordSet( new ResourceRecordSet().withName("www.dkim4.com") .withType("A").withTTL(300L).withResourceRecords(resourceRecord, resourceRecord2))); batch.setChanges(changes); req.setChangeBatch(batch); this.getRoute53Client().changeResourceRecordSets(req); }
@Test public void testChangeResourceRecordSets1(){ ChangeResourceRecordSetsRequest req = new ChangeResourceRecordSetsRequest(); req.setHostedZoneId("ZDF69134B71A944C99CC46E2CEC45E1A0"); ChangeBatch batch = new ChangeBatch(); batch.setComment("I have no idea what I'm doing."); Collection<Change> changes = new LinkedList<Change>(); ResourceRecord resourceRecord = new ResourceRecord().withValue("172.31.255.1"); changes.add(new Change().withAction("DELETE").withResourceRecordSet( new ResourceRecordSet().withName("www.example-meh.com.").withType("A").withSetIdentifier("sid0").withWeight(3L) .withTTL(300L).withResourceRecords(resourceRecord))); batch.setChanges(changes); req.setChangeBatch(batch); this.getRoute53Client().changeResourceRecordSets(req); }
public ResourceRecordSet makeRecordCNAME(final String source, final String target) { final Collection<ResourceRecord> resourceList = new ArrayList<ResourceRecord>(); resourceList.add(new ResourceRecord(target)); final ResourceRecordSet record = new ResourceRecordSet(); record.setName(source); record.setTTL(60L); record.setType("CNAME"); record.setResourceRecords(resourceList); return record; }
public void deploy() { /* * check for existence because once created, we aren't going to delete * it. Amazon could give the name to someone else. This won't matter * when we move CDN. */ final Optional<Bucket> maybeBucket = this.s3.listBuckets() .stream() .filter(b -> b.getName().equals(BucketName)) .findAny(); if (!maybeBucket.isPresent()) { this.s3.createBucket(new CreateBucketRequest(BucketName)); } this.s3.setBucketWebsiteConfiguration(BucketName, new BucketWebsiteConfiguration("index.html")); /* * Zone must exist */ final HostedZone zone = this.route53.listHostedZonesByName(new ListHostedZonesByNameRequest().withDNSName(Tld)) .getHostedZones() .stream() .findAny() .get(); final String zoneId = zone.getId().replaceAll("/.*/", ""); final ResourceRecord record = new ResourceRecord().withValue(Domain + ".s3.amazonaws.com"); final ResourceRecordSet records = new ResourceRecordSet().withName(Domain + ".") .withType(RRType.CNAME) .withTTL(60L) .withResourceRecords(record); final Change change = new Change().withAction(ChangeAction.UPSERT).withResourceRecordSet(records); final List<Change> changes = Collections.singletonList(change); final ChangeBatch changeBatch = new ChangeBatch().withChanges(changes); final ChangeResourceRecordSetsRequest changeRecordsRequest = new ChangeResourceRecordSetsRequest() .withHostedZoneId(zoneId).withChangeBatch(changeBatch); this.route53.changeResourceRecordSets(changeRecordsRequest); upload(SignupObjectName); upload(ThankYouObjectName); }
@Override public boolean updateRecord(String ip) { String recordName = config.getRecordName(); ChangeResourceRecordSetsRequest changeRequest = new ChangeResourceRecordSetsRequest(); changeRequest.setHostedZoneId(config.getZoneId()); ChangeBatch batch = new ChangeBatch(); Change change = new Change(); ResourceRecordSet set = getCurrentRecordSet(); if (set != null) { if (!equalsIgnoreCase("A", set.getType())) { log.error("Record already exists but not as Type A. No actions were performed."); return false; } change.setAction("UPSERT"); log.info("Record [" + recordName + "] already present on AWS Route 53. Upating it.."); } else { change.setAction("CREATE"); log.info("Record [" + recordName + "] not present on AWS Route 53. Creating it.."); set = new ResourceRecordSet().withName(recordName).withType("A"); } set.setTTL(Long.parseLong(config.getTTL())); List<ResourceRecord> l = new ArrayList<ResourceRecord>(); l.add(new ResourceRecord(ip)); set.setResourceRecords(l); change.setResourceRecordSet(set); batch.withChanges(change); changeRequest.setChangeBatch(batch); log.info("Updating DNS " + recordName + " with IP " + ip); ChangeResourceRecordSetsResult result = config.getAmazonRoute53Client() .changeResourceRecordSets(changeRequest); log.info(result.toString()); return true; }
@Override public boolean updateRecord(String ip) { String recordName = config.getRecordName(); ChangeResourceRecordSetsRequest changeRequest = new ChangeResourceRecordSetsRequest(); changeRequest.setHostedZoneId(config.getZoneId()); ChangeBatch batch = new ChangeBatch(); Change change = new Change(); ResourceRecordSet set = getCurrentRecordSet(); if (set!=null){ if (!equalsIgnoreCase("A", set.getType())){ log.error("Record already exists but not as Type A. No actions were performed."); return false; } change.setAction("UPSERT"); log.info("Record ["+recordName+"] already present on AWS Route 53. Upating it.."); } else{ change.setAction("CREATE"); log.info("Record ["+recordName+"] not present on AWS Route 53. Creating it.."); set = new ResourceRecordSet().withName(recordName).withType("A"); } set.setTTL(Long.parseLong(config.getTTL())); List<ResourceRecord> l = new ArrayList<ResourceRecord>(); l.add(new ResourceRecord(ip)); set.setResourceRecords(l); change.setResourceRecordSet(set); batch.withChanges(change); changeRequest.setChangeBatch(batch); log.info("Updating DNS "+recordName+" with IP "+ip); ChangeResourceRecordSetsResult result = config.getAmazonClient().changeResourceRecordSets(changeRequest); log.info(result.toString()); return true; }
public void populateServiceMetadata( final ServletConfig config, String serviceName) { logger.debug("init(): TXT record will be created for this service regarding its port and context path."); String contextPath = config.getServletContext().getContextPath(); String port = Appctx.getBean("TOMCAT_PORT"); String master_passwd = Appctx.getBean("DB_PASSWORD"); final String fqdn = (String) ConfigurationUtil .getConfiguration(Arrays.asList(new String[] { "FQDN" })); final String domain = (String) ConfigurationUtil .getConfiguration(Arrays.asList(new String[] { "FQDN_DOMAIN" })); String txtRecordValue = ":" + port + contextPath; String baseDNSServerURL = "http://localhost:" + port + "/DNS53Server/2012-02-29/"; logger.debug("Tomcat port = " + port + "; FQDN = " + fqdn + "; domain = " + domain + "; TXT Record Value = " + txtRecordValue + "; BaseDNSServerUrl = " + baseDNSServerURL); DNS53Client client = new DNS53Client(baseDNSServerURL + "hostedzone", baseDNSServerURL + "change", "admin", master_passwd); logger.debug("Service name = " + serviceName); String recordName = serviceName + "-" + fqdn; logger.debug("TXT Record Name: " + recordName); logger.debug("init(): Calling ListHostedZones to find the target zone!"); ListHostedZonesRequest lhzReq = new ListHostedZonesRequest(); lhzReq.setMaxItems("1"); ListHostedZonesResult lhzResult = client.listHostedZones(lhzReq); HostedZone zone = null; List<HostedZone> zones = lhzResult.getHostedZones(); if(zones != null && zones.size() > 0){ for(HostedZone hz : zones){ if(hz.getName().equals(domain + ".") || hz.getName().equals(domain)){ zone = hz; } } } else{ logger.error("BaseAsyncServlet encountered an error while it was trying to find the target hosted zone."); throw ErrorResponse.InternalFailure(); } if(zone == null){ logger.error("BaseAsyncServlet could not find any zone for this TopStackWeb instance."); throw ErrorResponse.InternalFailure(); } // TODO (optional) check for the CNAME record for this service before proceeding logger.debug("init(): Creating a new TXT record for " + recordName + " with \"" + txtRecordValue + "\" as its value!"); String zoneId = zone.getId(); ChangeResourceRecordSetsRequest crrsReq = new ChangeResourceRecordSetsRequest(); crrsReq.setHostedZoneId(zoneId); ChangeBatch cb = new ChangeBatch(); cb.setComment("BaseAsyncServlet => init(): Registering " + serviceName + " service for Transcend TopStack."); Collection<Change> changes = new LinkedList<Change>(); Change change = new Change(); change.setAction(ChangeAction.CREATE); ResourceRecordSet rrSet = new ResourceRecordSet(); rrSet.setName(recordName); rrSet.setTTL(900L); rrSet.setType(RRType.TXT); Collection<ResourceRecord> rr = new LinkedList<ResourceRecord>(); ResourceRecord record = new ResourceRecord(); record.setValue(txtRecordValue); rr.add(record); rrSet.setResourceRecords(rr); change.setResourceRecordSet(rrSet); changes.add(change); cb.setChanges(changes); crrsReq.setChangeBatch(cb); ChangeResourceRecordSetsResult result = client.changeResourceRecordSets(crrsReq); logger.debug("Result for the last ChangeResourceRecordSets request: " + result.toString()); }
public ListResourceRecordSetsResult listResourceRecordSets(ListResourceRecordSetsRequest req) throws AmazonServiceException, AmazonClientException{ Client c = Client.create(); WebResource r = c.resource(this.serverURL); MultivaluedMap<String, String> paramMap = new MultivaluedMapImpl(); if(req.getStartRecordName() != null){ paramMap.add("name", req.getStartRecordName()); } if(req.getStartRecordType() != null){ paramMap.add("type", req.getStartRecordType()); } if(req.getStartRecordIdentifier() != null){ paramMap.add("identifier", req.getStartRecordIdentifier()); } if(req.getMaxItems() != null){ paramMap.add("maxitems", req.getMaxItems()); } ClientResponse response = r .path(req.getHostedZoneId() + "/rrset") .queryParams(paramMap) .type(MediaType.APPLICATION_XML_TYPE) .accept(MediaType.TEXT_XML) .header("X-Amzn-Authorization", "AWS3 AWSAccessKeyId=" + this.accessKey + "," + "Algorithm=HmacSHA256," + "SignedHeaders=Host;X-Amz-Date," + "Signature=THISISANEXAMPLESIGNATURE=") .get(ClientResponse.class); String resultXml = response.getEntity(String.class); if(response.getStatus() != 200){ exceptionMapper(response, resultXml); } ListResourceRecordSetsResponsePOJO interResult = null; try { StringReader reader = new StringReader(resultXml); JAXBContext context = JAXBContext.newInstance(ListResourceRecordSetsResponsePOJO.class); Unmarshaller unmarshaller = context.createUnmarshaller(); interResult = (ListResourceRecordSetsResponsePOJO) unmarshaller.unmarshal(reader); } catch (JAXBException e) { e.printStackTrace(); return null; } if(interResult == null){ return null; } ListResourceRecordSetsResult result = new ListResourceRecordSetsResult(); result.setMaxItems(interResult.getMaxItems()); result.setIsTruncated(interResult.isTruncated()); if(interResult.getResourceRecordSets() != null){ Collection<ResourceRecordSet> rrSets = new LinkedList<ResourceRecordSet>(); for(ResourceRecordSetPOJO p : interResult.getResourceRecordSets()){ ResourceRecordSet temp = new ResourceRecordSet(); temp.setName(p.getName()); temp.setSetIdentifier(p.getSetIdentifier()); temp.setTTL(p.getTTL()); temp.setType(p.getType()); temp.setWeight(p.getWeight()); if(p.getResourceRecords() != null){ Collection<ResourceRecord> resourceRecords = new LinkedList<ResourceRecord>(); for(ResourceRecordPOJO record : p.getResourceRecords()){ ResourceRecord newRec = new ResourceRecord(); newRec.setValue(record.getValue()); resourceRecords.add(newRec); } temp.setResourceRecords(resourceRecords); } rrSets.add(temp); } result.setResourceRecordSets(rrSets); } return result; }
@Override public String marshall(MarshallStruct<ListResourceRecordSetsResult> input, HttpServletResponse resp) throws Exception { ListResourceRecordSetsResult result = input.getMainObject(); XMLNode response = new XMLNode( DNS53Constants.LISTRESOURCERECORDSETSRESPONSE); response.addAttr(DNS53Constants.XMLNS, DNS53Constants.XMLNS_VALUE); if (result.getResourceRecordSets() != null) { XMLNode rrSet = QueryUtil.addNode(response, DNS53Constants.RESOURCERECORDSETS); for (ResourceRecordSet rrs : result.getResourceRecordSets()) { XMLNode rr = QueryUtil.addNode(rrSet, DNS53Constants.RESOURCERECORDSET); QueryUtil.addNode(rr, DNS53Constants.NAME, rrs.getName()); QueryUtil.addNode(rr, DNS53Constants.TYPE, rrs.getType()); QueryUtil.addNode(rr, DNS53Constants.TTL, rrs.getTTL()); if (rrs.getSetIdentifier() != null) { QueryUtil.addNode(rr, DNS53Constants.SETIDENTIFIER, rrs.getSetIdentifier()); } if (rrs.getWeight() != null && rrs.getWeight() != -1) { QueryUtil.addNode(rr, DNS53Constants.WEIGHT, rrs.getWeight()); } if (rrs.getResourceRecords() != null && rrs.getResourceRecords().size() > 0) { XMLNode records = QueryUtil.addNode(rr, DNS53Constants.RESOURCERECORDS); for (ResourceRecord record : rrs.getResourceRecords()) { XMLNode r = QueryUtil.addNode(records, DNS53Constants.RESOURCERECORD); QueryUtil.addNode(r, DNS53Constants.VALUE, record.getValue()); } } } } QueryUtil.addNode(response, DNS53Constants.ISTRUNCATED, result.getIsTruncated()); QueryUtil.addNode(response, DNS53Constants.MAXITEMS, result.getMaxItems()); if (result.getIsTruncated() && result.getNextRecordName() != null) { QueryUtil.addNode(response, DNS53Constants.NEXTRECORDNAME, result.getNextRecordName()); } if (result.getIsTruncated() && result.getNextRecordType() != null) { QueryUtil.addNode(response, DNS53Constants.NEXTRECORDTYPE, result.getNextRecordType()); } if (result.getIsTruncated() && result.getNextRecordIdentifier() != null) { QueryUtil.addNode(response, DNS53Constants.NEXTRECORDIDENTIFIER, result.getNextRecordIdentifier()); } return response.toString(); }