private JaxrsResourceLocatorDescription resLocatorDescription(
     ResourceClass resClass,
     String contextPath,
     String mapping,
     Collection<String> servletMappings,
     List<Class<?>> resolvedCls) {
   JaxrsResourceLocatorDescription locatorRes = new JaxrsResourceLocatorDescription();
   locatorRes.resourceClass = resClass.getClazz();
   resolvedCls.add(resClass.getClazz());
   for (ResourceMethod resMethod : resClass.getResourceMethods()) {
     JaxrsResourceMethodDescription jaxrsRes = new JaxrsResourceMethodDescription();
     jaxrsRes.consumeTypes = resMethod.getConsumes();
     jaxrsRes.contextPath = contextPath;
     jaxrsRes.httpMethods = resMethod.getHttpMethods();
     jaxrsRes.method = resMethod.getMethod();
     jaxrsRes.produceTypes = resMethod.getProduces();
     jaxrsRes.resourceClass = resClass.getClazz();
     String resPath =
         new StringBuilder(mapping)
             .append("/")
             .append(resMethod.getFullpath())
             .toString()
             .replace("//", "/");
     jaxrsRes.resourcePath = resPath;
     jaxrsRes.servletMappings = servletMappings;
     addMethodParameters(jaxrsRes, resMethod.getMethod());
     locatorRes.methodsDescriptions.add(jaxrsRes);
   }
   for (ResourceLocator resLocator : resClass.getResourceLocators()) {
     Class<?> clz = resLocator.getReturnType();
     if (clz.equals(resClass.getClazz())) {
       break;
     }
     if (resolvedCls.contains(clz)) {
       break;
     } else {
       resolvedCls.add(clz);
     }
     ResourceClass subResClass = ResourceBuilder.locatorFromAnnotations(clz);
     String subMapping =
         new StringBuilder(mapping)
             .append("/")
             .append(resLocator.getFullpath())
             .toString()
             .replace("//", "/");
     JaxrsResourceLocatorDescription inner =
         resLocatorDescription(subResClass, contextPath, subMapping, servletMappings, resolvedCls);
     if (inner.containsMethodResources()) {
       locatorRes.subLocatorDescriptions.add(inner);
     }
   }
   return locatorRes;
 }
 public ModelNode toModelNode() {
   ModelNode node = new ModelNode();
   node.get(RESOURCE_CLASS.getName()).set(resourceClass.getCanonicalName());
   ModelNode resPathNode = node.get(RESOURCE_PATHS.getName());
   Collections.sort(methodsDescriptions);
   for (JaxrsResourceMethodDescription methodRes : methodsDescriptions) {
     resPathNode.add(methodRes.toModelNode());
   }
   ModelNode subResNode = node.get(SUB_RESOURCE_LOCATORS.getName());
   Collections.sort(subLocatorDescriptions);
   for (JaxrsResourceLocatorDescription subLocator : subLocatorDescriptions) {
     subResNode.add(subLocator.toModelNode());
   }
   return node;
 }