public static Root processJaxbClasses( Map<String, ApiClassDocumentation> javadocInfo, List<Class<?>> classes) { Map<Package, String> pkgToNamespace = Maps.newHashMap(); Root root = new Root(); for (Class<?> jaxbClass : classes) { JaxbInfo jaxbInfo = JaxbInfo.getFromCache(jaxbClass); String namespace = getNamespace(jaxbClass, pkgToNamespace); Service svc = root.getServiceForNamespace(namespace); if (svc == null) { svc = root.addService(new Service(namespace.replaceFirst("urn:", ""), namespace)); String svcDesc = serviceDescriptions.get(namespace); if (svcDesc == null) { throw new RuntimeException("No service description exists for namespace " + namespace); } else { svc.setDescription(svcDesc); } } String cmdName; Command cmd; XmlElementDescription desc; String className = jaxbClass.getName(); className = jaxbInfo.getRootElementName(); if (className.endsWith("Request")) { cmdName = className.substring(0, className.lastIndexOf("Request")); cmd = svc.getCommand(namespace, cmdName); if (cmd == null) { cmd = svc.addCommand(new Command(svc, cmdName, namespace)); } desc = XmlElementDescription.createTopLevel( jaxbInfo, namespace, jaxbInfo.getRootElementName()); markupDuplicateElements(desc); cmd.setDescription(desc.getDescription()); cmd.setRootRequestElement(desc); // getJavaDocInfoForCommand(cmd, jaxbClass); } else if (className.endsWith("Response")) { cmdName = className.substring(0, className.lastIndexOf("Response")); cmd = svc.getCommand(namespace, cmdName); if (cmd == null) { cmd = svc.addCommand(new Command(svc, cmdName, namespace)); } desc = XmlElementDescription.createTopLevel( jaxbInfo, namespace, jaxbInfo.getRootElementName()); markupDuplicateElements(desc); cmd.setRootResponseElement(desc); } } populateWithJavadocInfo(root, javadocInfo); return root; }