You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2011/05/11 14:08:46 UTC

svn commit: r1101851 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java tools/wadlto/jaxrs/src/test/resources/wadl/singleResource.xml

Author: sergeyb
Date: Wed May 11 12:08:46 2011
New Revision: 1101851

URL: http://svn.apache.org/viewvc?rev=1101851&view=rev
Log:
[CXF-3498] Making sure root resource path is not duplicated and a parameter representing request payload is added last

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
    cxf/trunk/tools/wadlto/jaxrs/src/test/resources/wadl/singleResource.xml

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java?rev=1101851&r1=1101850&r2=1101851&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java Wed May 11 12:08:46 2011
@@ -178,9 +178,9 @@ public class SourceGenerator {
         GrammarInfo gInfo = getGrammarInfo(appElement, schemaElements);
         for (int i = 0; i < resourceEls.size(); i++) {
             Element resource = resourceEls.get(i);
-            writeResourceClass(resource, typeClassNames, gInfo, src, generateInterfaces);
+            writeResourceClass(resource, typeClassNames, gInfo, src, true, generateInterfaces);
             if (generateInterfaces && generateImpl) {
-                writeResourceClass(resource, typeClassNames, gInfo, src, false);
+                writeResourceClass(resource, typeClassNames, gInfo, src, true, false);
             }
             if (resourceName != null) {
                 break;
@@ -227,15 +227,13 @@ public class SourceGenerator {
     }
     
     private void writeResourceClass(Element rElement, Set<String> typeClassNames, 
-                                    GrammarInfo gInfo, File src, boolean interfaceIsGenerated) {
+                                    GrammarInfo gInfo, File src, boolean isRoot,
+                                    boolean interfaceIsGenerated) {
         String resourceId = resourceName != null 
             ? resourceName : rElement.getAttribute("id");
         if (resourceId.length() == 0) {
             resourceId = DEFAULT_RESOURCE_NAME;
         }
-        String path = rElement.getAttribute("path");
-        
-        
         QName qname = JAXRSUtils.convertStringToQName(resourceId);
         if (getSchemaClassName(PackageUtils.getPackageNameByNameSpaceURI(qname.getNamespaceURI()), 
                                gInfo, qname.getLocalPart(), typeClassNames) != null) {
@@ -253,7 +251,8 @@ public class SourceGenerator {
         sbImports.append("package " + classPackage)
             .append(";").append(getLineSep()).append(getLineSep());
         
-        if (writeAnnotations(interfaceIsGenerated)) {
+        if (isRoot && writeAnnotations(interfaceIsGenerated)) {
+            String path = rElement.getAttribute("path");
             writeAnnotation(sbCode, imports, Path.class, path, true, false);
         }
                 
@@ -261,16 +260,16 @@ public class SourceGenerator {
         writeImplementsInterface(sbCode, qname.getLocalPart(), interfaceIsGenerated);              
         sbCode.append(" {" + getLineSep() + getLineSep());
         
-        writeMethods(rElement, imports, sbCode, typeClassNames, gInfo, interfaceIsGenerated);
+        writeMethods(rElement, imports, sbCode, typeClassNames, gInfo, isRoot, interfaceIsGenerated);
         
         List<Element> childEls = DOMUtils.getChildrenWithName(rElement, 
             WadlGenerator.WADL_NS, "resource");
         for (Element childEl : childEls) {
             if (childEl.getAttribute("id").length() == 0) {
-                writeMethods(childEl, imports, sbCode, typeClassNames, gInfo, interfaceIsGenerated);
+                writeMethods(childEl, imports, sbCode, typeClassNames, gInfo, false, interfaceIsGenerated);
             } else {
-                writeResourceMethod(childEl, childEl, imports, sbCode, typeClassNames, gInfo, 
-                                    interfaceIsGenerated);
+                writeResourceMethod(childEl, imports, sbCode, typeClassNames, gInfo, 
+                                    false, interfaceIsGenerated);
             }
         }
         sbCode.append("}");
@@ -281,7 +280,7 @@ public class SourceGenerator {
         for (Element subEl : childEls) {
             String id = subEl.getAttribute("id");
             if (id.length() > 0 && !resourceId.equals(id) && !id.startsWith("{java")) {
-                writeResourceClass(subEl, typeClassNames, gInfo, src, interfaceIsGenerated);
+                writeResourceClass(subEl, typeClassNames, gInfo, src, false, interfaceIsGenerated);
             }
         }
     }
@@ -316,20 +315,21 @@ public class SourceGenerator {
     
     private String getClassComment() {
         return "/**"
-            + getLineSep() + " * Generated by Apache CXF"
+            + getLineSep() + " * Created by Apache CXF WadlToJava code generator"
             + getLineSep() + "**/";
     }
     
     private void writeMethods(Element rElement,  
                               Set<String> imports, StringBuilder sbCode, 
                               Set<String> typeClassNames, GrammarInfo gInfo,
+                              boolean isRoot,
                               boolean interfaceIsGenerated) {
         List<Element> methodEls = DOMUtils.getChildrenWithName(rElement, 
             WadlGenerator.WADL_NS, "method");
        
         for (Element methodEl : methodEls) {
-            writeResourceMethod(rElement, methodEl, imports, sbCode, typeClassNames, gInfo, 
-                                interfaceIsGenerated);    
+            writeResourceMethod(methodEl, imports, sbCode, typeClassNames, gInfo, 
+                                isRoot, interfaceIsGenerated);    
         }
     }
     
@@ -370,14 +370,19 @@ public class SourceGenerator {
         }
     }
     
-    private void writeResourceMethod(Element resourceEl, Element methodEl, 
+    private void writeResourceMethod(Element methodEl, 
                                      Set<String> imports, StringBuilder sbCode, 
                                      Set<String> typeClassNames, GrammarInfo gInfo,
+                                     boolean isRoot,
                                      boolean interfaceIsGenerated) {
+        Element resourceEl = "resource".equals(methodEl.getLocalName()) 
+            ? methodEl : (Element)methodEl.getParentNode();
+        
         String methodName = methodEl.getAttribute("name");
+        String methodNameLowerCase = methodName.toLowerCase();
         String id = methodEl.getAttribute("id");
         if (id.length() == 0) {
-            id = methodName.toLowerCase();
+            id = methodNameLowerCase;
         }
         
         List<Element> responseEls = DOMUtils.getChildrenWithName(methodEl, 
@@ -389,21 +394,20 @@ public class SourceGenerator {
         if (writeAnnotations(interfaceIsGenerated)) {
             sbCode.append(TAB);
             
-            if (methodName.length() > 0) {
-                if (HTTP_METHOD_ANNOTATIONS.containsKey(methodName.toLowerCase())) {
+            if (methodNameLowerCase.length() > 0) {
+                if (HTTP_METHOD_ANNOTATIONS.containsKey(methodNameLowerCase)) {
                     writeAnnotation(sbCode, imports, 
-                                    HTTP_METHOD_ANNOTATIONS.get(methodName.toLowerCase()), null, true, true);
+                                    HTTP_METHOD_ANNOTATIONS.get(methodNameLowerCase), null, true, true);
                 } else {
                     // TODO : write a custom annotation class name based on HttpMethod    
                 }
-                
                 writeFormatAnnotations(requestEls, sbCode, imports, true);
                 writeFormatAnnotations(responseEls, sbCode, imports, false);
             }
-            
-            String path = resourceEl.getAttribute("path");
-            writeAnnotation(sbCode, imports, Path.class, path, true, true);
-            
+            if (!isRoot) {
+                String path = resourceEl.getAttribute("path");
+                writeAnnotation(sbCode, imports, Path.class, path, true, true);
+            }
         } else {
             sbCode.append(getLineSep()).append(TAB);
         }
@@ -412,7 +416,7 @@ public class SourceGenerator {
             sbCode.append("public ");
         }
         boolean responseTypeAvailable = true;
-        if (methodName.length() > 0) {
+        if (methodNameLowerCase.length() > 0) {
             responseTypeAvailable = writeResponseType(responseEls, sbCode, imports, typeClassNames, gInfo);
             sbCode.append(id);
         } else {
@@ -508,34 +512,23 @@ public class SourceGenerator {
                                    Set<String> typeClassNames, 
                                    GrammarInfo gInfo,
                                    boolean interfaceIsGenerated) {
+        
         boolean form = false;
+        boolean formParamsAvailbale = false;
         if (requestEls.size() == 1 && inParamEls.size() == 0) {
             inParamEls.addAll(DOMUtils.getChildrenWithName(requestEls.get(0), 
                  WadlGenerator.WADL_NS, "param"));
+            int currentSize = inParamEls.size();
             form = addFormParameters(inParamEls, requestEls.get(0));
+            formParamsAvailbale = currentSize < inParamEls.size(); 
         }
-        
-        String elementName = null;
-        
-        List<Element> repElements = requestEls.size() == 1 
-            ? DOMUtils.getChildrenWithName(requestEls.get(0), WadlGenerator.WADL_NS, "representation")
-            : CastUtils.cast(Collections.emptyList(), Element.class);
-        if (repElements.size() > 0) {    
-            elementName = getElementRefName(repElements, typeClassNames, gInfo, imports);
-        }
-        if (elementName != null) {
-            sbCode.append(elementName).append(" ").append(elementName.toLowerCase());
-            if (inParamEls.size() > 0) {
-                sbCode.append(", ");
-            }
-        } else if (inParamEls.size() == 0) {
-            if (form) {
-                addImport(imports, MultivaluedMap.class.getName());
-                sbCode.append("MultivaluedMap map");
-            }
-            return;
-        }
+                  
+        if (form && !formParamsAvailbale) {
+            addImport(imports, MultivaluedMap.class.getName());
+            sbCode.append("MultivaluedMap map");
+        } 
         for (int i = 0; i < inParamEls.size(); i++) {
+    
             Element paramEl = inParamEls.get(i);
 
             String name = paramEl.getAttribute("name");
@@ -558,6 +551,23 @@ public class SourceGenerator {
                 }
             }
         }
+        if (!form) {
+            String elementName = null;
+            
+            List<Element> repElements = requestEls.size() == 1 
+                ? DOMUtils.getChildrenWithName(requestEls.get(0), WadlGenerator.WADL_NS, "representation")
+                : CastUtils.cast(Collections.emptyList(), Element.class);
+            if (repElements.size() > 0) {    
+                elementName = getElementRefName(repElements, typeClassNames, gInfo, imports);
+            }
+            if (elementName != null) {
+                if (inParamEls.size() > 0) {
+                    sbCode.append(", ");
+                }
+                sbCode.append(elementName).append(" ").append(elementName.toLowerCase());
+            }
+        }
+        
     }
     
     private String getPrimitiveType(Element paramEl) {

Modified: cxf/trunk/tools/wadlto/jaxrs/src/test/resources/wadl/singleResource.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wadlto/jaxrs/src/test/resources/wadl/singleResource.xml?rev=1101851&r1=1101850&r2=1101851&view=diff
==============================================================================
--- cxf/trunk/tools/wadlto/jaxrs/src/test/resources/wadl/singleResource.xml (original)
+++ cxf/trunk/tools/wadlto/jaxrs/src/test/resources/wadl/singleResource.xml Wed May 11 12:08:46 2011
@@ -1,8 +1,8 @@
 <application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prefix1="http://superbooks">
 
  <resources base="http://localhost:8080/baz">
-   <param name="id" style="template" type="xs:long"/>
    <resource path="/bookstore/{id}">
+     <param name="id" style="template" type="xs:long"/>
      <method name="GET">
       <request/>
       <response>