Я читаю по именам файлов корневого пути для моего wesbite, java shuold читает и записывает в xml файл. Мне не нужно писать некоторые имена файлов в XML-файле. Строка имен файлов генерируется в моем методе createXMLNode. Это переменная расположения String. Мне нужна эта переменная в моем методе doget, чтобы указать, какие имена файлов записать в xml sitemap, который я генерирую для своего сайта. У меня есть строка, которую я должен передать внутри переопределенного метода. Эта строка не может быть глобальной переменной
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
ResourceResolver resourceResolver = request.getResourceResolver();
String sitemapRootPath = rootPath;
LOG.info("sitemapRootPath from servlet = " + sitemapRootPath);
Resource resource = resourceResolver.getResource(sitemapRootPath);
if(resource != null) {
response.setContentType("text/xml;charset=UTF-8");
Page page = resource.adaptTo(Page.class);
Iterator<Page> pageIterator = page.listChildren();
//Initializing the XML document before writing data into the file
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
LOG.info("Inside Try");
builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element rootElement = document.createElement("urlset");
rootElement.setAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
document.appendChild(rootElement);
for(int i = 0; i < staticPageData.length; i ++) {
createXMLNodeForStaticPages(document, rootElement, request, staticPageData[i]);
}
while(pageIterator.hasNext()) {
createXMLNode(document, rootElement, request, pageIterator);
}
}
Другой метод вызывается внутри цикла while, но этот метод также генерирует мою строку, которая мне нужна. Значение местоположения String - это то, что мне нужно внутри моего метода doget.
public void createXMLNode(Document document, Element rootElement, SlingHttpServletRequest request, Iterator<Page> pageIterator) {
Element headElement = document.createElement("url");
Element locElement = document.createElement("loc");
Element lastModElement = document.createElement("lastMod");
Element changefreqElement = document.createElement("changefreq");
Element priorityElement = document.createElement("priority");
Node locElementNode = locElement;
Node lastModElementNode = lastModElement;
Node changefreqElementNode = changefreqElement;
Node priorityElementNode = priorityElement;
Page childPage = pageIterator.next();
locElementNode.setTextContent(request.getScheme() + "://" + request.getServerName() + childPage.getPath());
LOG.error("childPage.getLastModified()" + childPage.getLastModified());
if(null != childPage.getLastModified()) {
Date date = childPage.getLastModified().getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
try {
dateFormat.parse("2019-07-15");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
lastModElementNode.setTextContent(dateFormat.format(date));
}
changefreqElementNode.setTextContent("weekly");
String location = request.getScheme() + "://" + request.getServerName() + childPage.getPath();
locElementNode.setTextContent(location);
rootElement.appendChild(headElement);
headElement.appendChild(locElementNode);
headElement.appendChild(lastModElementNode);
headElement.appendChild(changefreqElementNode);
headElement.appendChild(priorityElementNode);
Iterator<Page> childPageIterator = childPage.listChildren();
while(childPageIterator.hasNext()) {
createXMLNode(document, rootElement, request, childPageIterator);
}
priorityElementNode.setTextContent(getPriority(location));
}
Как я могу получить это значение внутри этого метода или я должен создать отдельный метод и сделать там свой цикл while, поэтому, когда я вызываю этот метод, я могу запустить цикл while со строкой