Dynamic Sitemap usinf factory Configuration
I have created a servlet, but for multiple sites this not working only for one site this working
@Component(service = Servlet.class, property = {
"sling.servlet.methods=GET",
"sling.servlet.resourceTypes=sling/servlet/default",
"sling.servlet.extensions=sitemap.xml"
})
@Designate(ocd = DynamicSitemapConfig.class, factory = true)
public class DynamicSitemapServlet extends SlingSafeMethodsServlet {
private static final Logger LOG = LoggerFactory.getLogger(DynamicSitemapServlet.class);
private String rootPath;
private List<String> excludedPaths;
private List<DynamicSitemapServlet> configsList;
@Activate
@Modified
protected void activate(DynamicSitemapConfig config) {
this.rootPath = config.rootPath();
this.excludedPaths = Arrays.asList(config.excludedPaths());
}
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/xml");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
response.flushBuffer();
ResourceResolver resolver = request.getResourceResolver();
PageManager pageManager = resolver.adaptTo(PageManager.class);
if (pageManager == null) {
LOG.error("PageManager is null.");
response.getWriter().write("<error>Unable to retrieve PageManager.</error>");
return;
}
Page rootPage = pageManager.getPage(rootPath);
if (rootPage == null) {
LOG.error("Root page not found: {}", rootPath);
response.getWriter().write("<error>Root page not found.</error>");
return;
}
LOG.info("Generating sitemap for root page: {}", rootPage.getPath());
String domain = getDomainFromRequest(request);
boolean includeLastModified = shouldIncludeLastModified(rootPage);
// Generate XML sitemap
StringBuilder xml = new StringBuilder();
xml.append("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">");
generateSitemap(rootPage, xml, request, includeLastModified);
xml.append("</urlset>");
// Write final XML content
response.getWriter().write(xml.toString());
response.getWriter().flush();
response.getWriter().close();
}
.................
..........
...........................
}