Check the link below to see the sitemap of Tapestry5 dev-util:
View sitemappackage es.carlosmontero.webapp.t5devutil.pages;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.annotations.ContentType;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.services.PageRenderLinkSource;
import org.apache.tapestry5.services.PersistentLocale;
import es.carlosmontero.webapp.t5devutil.pages.IndexPage.MenuGroup;
import es.carlosmontero.webapp.t5devutil.pages.IndexPage.MenuItem;
@ContentType(value = "text/xml")
public class Sitemap {
   @Inject
   private Messages messages;
   @Inject
   private PageRenderLinkSource pageRenderLinkSource;
   @Inject
   private PersistentLocale persistentLocale;
   @Property
   private List<Object> pages;
   @Property
   private Object page;
   @Property
   private List<String> locales;
   @Property
   private String locale, otherLocale;
   @Inject
   @Symbol(SymbolConstants.SUPPORTED_LOCALES)
   private String supportedLocales;
   public void setupRender() {
      locales = Arrays.asList(supportedLocales.split(","));
      pages = new ArrayList<Object>();
      pages.add(IndexPage.class);
      pages.add(AboutPage.class);
      for (final MenuGroup menuGroup : IndexPage.MENU_GROUPS) {
         for (final MenuItem menuItem : menuGroup.items) {
            if (StringUtils.isNotBlank(menuItem.page)) {
               pages.add(menuItem.page);
            }
         }
      }
   }
   public String getURL(final String pageName, final String locale) {
      persistentLocale.set(new Locale(locale));
      return pageRenderLinkSource.createPageRenderLinkWithContext(pageName).toAbsoluteURI();
   }
   public String getLink(final String pageName, final String locale) {
      return messages.format("SitemapLink", locale, getURL(pageName, locale));
   }
   public String getURL() {
      return getURL(locale);
   }
   public String getURL(final String locale) {
      persistentLocale.set(new Locale(locale));
      if (page instanceof String) {
         return pageRenderLinkSource.createPageRenderLinkWithContext((String) page).toAbsoluteURI();
      }
      return pageRenderLinkSource.createPageRenderLinkWithContext((Class) page).toAbsoluteURI();
   }
   public String getLink() {
      return messages.format("SitemapLink", otherLocale, getURL(otherLocale));
   }
   public String getLink2() {
      return messages.format("SitemapLink", locale, getURL(locale));
   }
   public List<String> getOtherLocales() {
      final List<String> otherLocales = new ArrayList<String>(locales);
      otherLocales.remove(locale);
      return otherLocales;
   }
   /**
    * Optional. For debug.
    */
   public String getXmlComment() {
      String pageName = null;
      if (page instanceof String) {
         pageName = (String) page;
      }
      else if (page instanceof Class) {
         pageName = ((Class) page).getCanonicalName().toLowerCase();
         pageName = pageName.substring(21, pageName.length() - 4);
      }
      return new StringBuilder("<!-- ").append(pageName.replace(".", "/"))
              .append(" -->").toString();
   }
}