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 2012/04/19 23:43:59 UTC

svn commit: r1328123 - /cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java

Author: sergeyb
Date: Thu Apr 19 21:43:59 2012
New Revision: 1328123

URL: http://svn.apache.org/viewvc?rev=1328123&view=rev
Log:
[CXF-4250] Handling root-level WADL method declarations properly

Modified:
    cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java

Modified: cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java?rev=1328123&r1=1328122&r2=1328123&view=diff
==============================================================================
--- cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java (original)
+++ cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java Thu Apr 19 21:43:59 2012
@@ -241,7 +241,7 @@ public class SourceGenerator {
         Element appElement = app.getAppElement();
         List<Element> resourcesEls = getWadlElements(appElement, "resources");
         if (resourcesEls.size() != 1) {
-            throw new IllegalStateException("WADL resources element is missing");
+            throw new IllegalStateException("Single WADL resources element is expected");
         }
         
         List<Element> resourceEls = getWadlElements(resourcesEls.get(0), "resource");
@@ -475,9 +475,7 @@ public class SourceGenerator {
         } else {
             name = generateInterfaces ? clsName + "Impl" : clsName;
         }
-        StringBuilder sb = new StringBuilder();
-        sb.append(Character.toUpperCase(name.charAt(0)));
-        name = name.length() > 1 ? sb.append(name.substring(1)).toString() : sb.toString();
+        name = firstCharToUpperCase(name);
         for (String typeName : typeClassNames) {
             String localName = typeName.contains(".") 
                 ? typeName.substring(typeName.lastIndexOf('.') + 1) : typeName;
@@ -488,6 +486,12 @@ public class SourceGenerator {
         return name;
     }
     
+    private String firstCharToUpperCase(String name) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(Character.toUpperCase(name.charAt(0)));
+        return name.length() > 1 ? sb.append(name.substring(1)).toString() : sb.toString();
+    }
+    
     private boolean writeAnnotations(boolean interfaceIsGenerated) {
         if (interfaceIsGenerated) {
             return true;
@@ -633,8 +637,7 @@ public class SourceGenerator {
             }
             boolean responseTypeAvailable = true;
             if (methodNameLowerCase.length() > 0) {
-                responseTypeAvailable = writeResponseType(responseEls, sbCode, imports,
-                        info.getTypeClassNames(), info.getGrammarInfo());
+                responseTypeAvailable = writeResponseType(responseEls, sbCode, imports, info);
                 sbCode.append(id + suffixName);
             } else {
                 boolean expandedQName = id.startsWith("{");
@@ -648,7 +651,10 @@ public class SourceGenerator {
                     : clsSimpleName.substring(packageName.length() + 1);
                 String subResponseNs = clsSimpleName == null ? getClassPackageName(packageName) 
                     : clsSimpleName.substring(0, packageName.length());
-                String parentId = ((Element)resourceEl.getParentNode()).getAttribute("id");
+                Object parentNode = resourceEl.getParentNode();
+                String parentId = parentNode instanceof Element 
+                    ? ((Element)parentNode).getAttribute("id")
+                    : ""; 
                 writeSubResponseType(id.equals(parentId), subResponseNs, localName, 
                         sbCode, imports);
                 
@@ -749,8 +755,8 @@ public class SourceGenerator {
     
     private boolean writeResponseType(List<Element> responseEls,
                                       StringBuilder sbCode,
-                                      Set<String> imports, Set<String> typeClassNames, 
-                                      GrammarInfo gInfo) {
+                                      Set<String> imports,  
+                                      ContextInfo info) {
         
         Element okResponse = getOKResponse(responseEls);
         
@@ -766,8 +772,7 @@ public class SourceGenerator {
             return false;
         }
         String elementName = getElementRefName(
-                getActualRepElement(repElements, getXmlReps(repElements).get(0)),
-                typeClassNames, gInfo, imports);
+                getActualRepElement(repElements, getXmlReps(repElements).get(0)), info, imports);
         if (elementName != null) {
             sbCode.append(elementName + " ");
         } else {
@@ -846,7 +851,7 @@ public class SourceGenerator {
                 }
             }
             boolean isRepeating = Boolean.valueOf(paramEl.getAttribute("repeating"));
-            String type = getPrimitiveType(paramEl);
+            String type = getPrimitiveType(paramEl, info, imports);
             if (paramAnn == QueryParam.class
                 && (isRepeating || !Boolean.valueOf(paramEl.getAttribute("required")))    
                 && AUTOBOXED_PRIMITIVES_MAP.containsKey(type)) {
@@ -870,8 +875,7 @@ public class SourceGenerator {
         String elementParamName = null;
         if (!form) {
             if (!jaxpRequired) {    
-                elementParamType = getElementRefName(repElement, 
-                        info.getTypeClassNames(), info.getGrammarInfo(), imports);
+                elementParamType = getElementRefName(repElement, info, imports);
                 if (elementParamType != null) {
                     elementParamName = elementParamType.toLowerCase();
                 }
@@ -940,7 +944,7 @@ public class SourceGenerator {
         return elements;
     }
     
-    private String getPrimitiveType(Element paramEl) {
+    private String getPrimitiveType(Element paramEl, ContextInfo info, Set<String> imports) {
         String type = paramEl.getAttribute("type");
         if (type.length() == 0) {
             return "String";
@@ -950,13 +954,44 @@ public class SourceGenerator {
         if (XSD_SPECIFIC_TYPE_MAP.containsKey(value)) {
             return XSD_SPECIFIC_TYPE_MAP.get(value);
         } else {
-            return value;
+            String actualValue = value.replaceAll("[\\-\\_]", "");
+            if (!actualValue.equals(value) && pair.length > 1) {
+                actualValue = convertRefToClassName(pair[0], actualValue, actualValue, info, imports);
+            }
+            return actualValue;
+        }
+    }
+    
+    private String convertRefToClassName(String prefix,
+                                         String actualValue,
+                                         String defaultValue,
+                                         ContextInfo info, 
+                                         Set<String> imports) {
+        GrammarInfo gInfo = info.getGrammarInfo();
+        if (gInfo != null) {
+            String namespace = gInfo.getNsMap().get(prefix);
+            if (namespace != null) {
+                String packageName = getPackageFromNamespace(namespace);
+                String clsName = getSchemaClassName(packageName, gInfo, actualValue, 
+                                                    info.getTypeClassNames());
+                if (clsName != null) {
+                    addImport(imports, clsName);
+                    int index = clsName.lastIndexOf(".");
+                    if (index != -1) {
+                        actualValue = clsName.substring(index + 1);
+                    } else {
+                        actualValue = clsName;
+                    }       
+                }
+            } else {
+                actualValue = defaultValue;
+            }
         }
+        return actualValue;
     }
     
     private String getElementRefName(Element repElement,
-                                     Set<String> typeClassNames,
-                                     GrammarInfo gInfo, 
+                                     ContextInfo info, 
                                      Set<String> imports) {
         if (repElement == null) {
             return null;
@@ -966,26 +1001,12 @@ public class SourceGenerator {
         if (elementRef.length() > 0) {
             String[] pair = elementRef.split(":");
             if (pair.length == 2) {
-                String namespace = gInfo != null ? gInfo.getNsMap().get(pair[0]) : null;
-                if (namespace == null) {
-                    return null;
-                }
-                String packageName = getPackageFromNamespace(namespace);
-                String clsName = getSchemaClassName(packageName, gInfo, pair[1], typeClassNames);
-                if (clsName != null) {
-                    addImport(imports, clsName);
-                    int index = clsName.lastIndexOf(".");
-                    if (index != -1) {
-                        return clsName.substring(index + 1);
-                    } else {
-                        return clsName;
-                    }
-                }
+                return convertRefToClassName(pair[0], pair[1], null, info, imports);
             }
         } else {
             Element param = DOMUtils.getFirstChildWithName(repElement, getWadlNamespace(), "param");
             if (param != null) {
-                return getPrimitiveType(param);
+                return getPrimitiveType(param, info, imports);
             }
         }
         return null;
@@ -1125,7 +1146,16 @@ public class SourceGenerator {
             
             String schemaURI = resolveLocationWithCatalog(href);
             if (schemaURI == null) {
-                schemaURI = app.getWadlPath() != null ? getBaseWadlPath(app.getWadlPath()) + href : href;
+                if (!URI.create(href).isAbsolute() && app.getWadlPath() != null) {
+                    String baseWadlPath = getBaseWadlPath(app.getWadlPath());
+                    if  (!href.startsWith("/")) {
+                        schemaURI = baseWadlPath + href;
+                    } else {
+                        schemaURI = URI.create(baseWadlPath).resolve(href).toString();
+                    }
+                } else {
+                    schemaURI = href;
+                }
             }
             schemas.add(createSchemaInfo(readIncludedDocument(schemaURI),
                                             schemaURI));