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; }