Repository: cxf
Updated Branches:
  refs/heads/3.1.x-fixes 38a36b5a5 -> c811308df


[CXF-6759] Fixing a duplicate method issue, patch from Neal Hu applied with 
minor updates


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/c811308d
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/c811308d
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/c811308d

Branch: refs/heads/3.1.x-fixes
Commit: c811308dfe36bdb08236c33694aaa9a379c485b6
Parents: 38a36b5
Author: Sergey Beryozkin <sberyoz...@gmail.com>
Authored: Fri Jan 29 10:13:46 2016 +0000
Committer: Sergey Beryozkin <sberyoz...@gmail.com>
Committed: Fri Jan 29 10:15:15 2016 +0000

----------------------------------------------------------------------
 .../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 32 ++++++++++++++-----
 .../tools/wadlto/jaxrs/JAXRSContainerTest.java  | 33 +++++++++++---------
 .../src/test/resources/wadl/testComplexPath.xml |  3 ++
 3 files changed, 46 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/c811308d/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
----------------------------------------------------------------------
diff --git 
a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
 
b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
index ff37819..f07df3b 100644
--- 
a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
+++ 
b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
@@ -506,7 +506,10 @@ public class SourceGenerator {
         writeImplementsInterface(sbCode, qname.getLocalPart(), 
info.isInterfaceGenerated());              
         sbCode.append(" {" + getLineSep() + getLineSep());
         
-        writeMethods(rElement, classPackage, imports, sbCode, info, 
resourceId, isRoot, "");
+        Map<String, Integer> methodNameMap = new HashMap<String, Integer>();
+        writeMethods(rElement, classPackage, imports, sbCode, 
+                     info, resourceId, isRoot, "",
+                     methodNameMap);
         
         sbCode.append("}");
         writeImports(sbImports, imports, classPackage);
@@ -611,14 +614,15 @@ public class SourceGenerator {
                               ContextInfo info,
                               String resourceId,
                               boolean isRoot,
-                              String currentPath) {
+                              String currentPath,
+                              Map<String, Integer> methodNameMap) {
     //CHECKSTYLE:ON    
         List<Element> methodEls = getWadlElements(rElement, "method");
         
         List<Element> currentInheritedParams = inheritResourceParams 
             ? new LinkedList<Element>(info.getInheritedParams()) : 
Collections.<Element>emptyList();
         for (Element methodEl : methodEls) {
-            writeResourceMethod(methodEl, classPackage, imports, sbCode, info, 
isRoot, currentPath);    
+            writeResourceMethod(methodEl, classPackage, imports, sbCode, info, 
isRoot, currentPath, methodNameMap);    
         }
         if (inheritResourceParams && methodEls.isEmpty()) {
             info.getInheritedParams().addAll(getWadlElements(rElement, 
"param"));
@@ -633,9 +637,9 @@ public class SourceGenerator {
             String newPath = currentPath + path.replace("//", "/");
             String id = childEl.getAttribute("id");
             if (id.length() == 0) {
-                writeMethods(childEl, classPackage, imports, sbCode, info, id, 
false, newPath);
+                writeMethods(childEl, classPackage, imports, sbCode, info, id, 
false, newPath, methodNameMap);
             } else {
-                writeResourceMethod(childEl, classPackage, imports, sbCode, 
info, false, newPath);
+                writeResourceMethod(childEl, classPackage, imports, sbCode, 
info, false, newPath, methodNameMap);
             }
         }
         info.getInheritedParams().clear();
@@ -679,13 +683,16 @@ public class SourceGenerator {
         }
     }
     
+    //CHECKSTYLE:OFF
     private void writeResourceMethod(Element methodEl,
                                      String classPackage,
                                      Set<String> imports,
                                      StringBuilder sbCode,
                                      ContextInfo info,
                                      boolean isRoot,
-                                     String currentPath) {
+                                     String currentPath,
+                                     Map<String, Integer> methodNameMap) {
+    //CHECKSTYLE:ON    
         StringBuilder sbMethodCode = sbCode;
         StringBuilder sbMethodDocs = null;
         StringBuilder sbMethodRespDocs = null;
@@ -793,7 +800,18 @@ public class SourceGenerator {
                     }
                     genMethodName += firstCharToUpperCase(sb.toString());
                 }
-                sbMethodCode.append(genMethodName.replace("-", ""));
+                genMethodName = genMethodName.replace("-", "");
+                
+                Integer value = methodNameMap.get(genMethodName);
+                if (value == null) {
+                    value = 0;
+                }
+                methodNameMap.put(genMethodName, ++value);
+                if (value > 1) { 
+                    genMethodName = genMethodName + value.toString();
+                }
+                
+                sbMethodCode.append(genMethodName);
             } else {
                 writeSubresourceMethod(resourceEl, imports, sbMethodCode, 
info, id, suffixName);
             }

http://git-wip-us.apache.org/repos/asf/cxf/blob/c811308d/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
----------------------------------------------------------------------
diff --git 
a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
 
b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
index bbcde20..2be4efa 100644
--- 
a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
+++ 
b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
@@ -431,28 +431,31 @@ public class JAXRSContainerTest extends ProcessorTestBase 
{
             
             Class<?> test1 = loader.loadClass("application.Resource");
             Method[] test1Methods = test1.getDeclaredMethods();
-            assertEquals(1, test1Methods.length);
+            assertEquals(2, test1Methods.length);
             assertEquals(2, test1Methods[0].getAnnotations().length);
-            assertNotNull(test1Methods[0].getAnnotation(GET.class));           
 
-            Path path = test1Methods[0].getAnnotation(Path.class);
-            assertNotNull(path);
-            assertEquals("/get-add-method", path.value());
-            
-            assertEquals("getGetaddmethod", test1Methods[0].getName());
-            Class<?>[] paramTypes = test1Methods[0].getParameterTypes();
-            assertEquals(1, paramTypes.length);
-            Annotation[][] paramAnns = 
test1Methods[0].getParameterAnnotations();
-            assertEquals(String.class, paramTypes[0]);
-            assertEquals(1, paramAnns[0].length);
-            PathParam test1PathParam1 = (PathParam)paramAnns[0][0];
-            assertEquals("id", test1PathParam1.value());
-            
+            checkComplexPathMethod(test1Methods[0], "");
+            checkComplexPathMethod(test1Methods[1], "2");
         } catch (Exception e) {
             e.printStackTrace();
             fail();
         }
     }
     
+    private void checkComplexPathMethod(Method m, String suffix) {
+        assertNotNull(m.getAnnotation(GET.class));            
+        Path path = m.getAnnotation(Path.class);
+        assertNotNull(path);
+        assertEquals("/get-add-method", path.value());
+        assertEquals("getGetaddmethod" + suffix, m.getName());
+        Class<?>[] paramTypes = m.getParameterTypes();
+        assertEquals(1, paramTypes.length);
+        Annotation[][] paramAnns = m.getParameterAnnotations();
+        assertEquals(String.class, paramTypes[0]);
+        assertEquals(1, paramAnns[0].length);
+        PathParam methodPathParam1 = (PathParam)paramAnns[0][0];
+        assertEquals("id", methodPathParam1.value());
+    }
+    
     @Test    
     public void testCodeGenWithImportedSchemaAndResourceSet() {
         try {

http://git-wip-us.apache.org/repos/asf/cxf/blob/c811308d/tools/wadlto/jaxrs/src/test/resources/wadl/testComplexPath.xml
----------------------------------------------------------------------
diff --git a/tools/wadlto/jaxrs/src/test/resources/wadl/testComplexPath.xml 
b/tools/wadlto/jaxrs/src/test/resources/wadl/testComplexPath.xml
index 372ca85..63cf53f 100644
--- a/tools/wadlto/jaxrs/src/test/resources/wadl/testComplexPath.xml
+++ b/tools/wadlto/jaxrs/src/test/resources/wadl/testComplexPath.xml
@@ -7,6 +7,9 @@
         <method name="GET">
           <response/>
         </method>
+        <method name="GET">
+          <response/>
+        </method>
       </resource>
      </resource>
        </resources>

Reply via email to