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/10/21 17:02:12 UTC

svn commit: r1187384 - in /cxf/branches/2.4.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/ tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/ tools/wadlto/jaxrs/src/test/resources/wadl/

Author: sergeyb
Date: Fri Oct 21 15:02:11 2011
New Revision: 1187384

URL: http://svn.apache.org/viewvc?rev=1187384&view=rev
Log:
Merged revisions 1187376 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1187376 | sergeyb | 2011-10-21 15:46:10 +0100 (Fri, 21 Oct 2011) | 1 line
  
  [CXF-3854] Applying the patch with spme mofifications on behalf of Lars Weber, thanks
........

Modified:
    cxf/branches/2.4.x-fixes/   (props changed)
    cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
    cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
    cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstoreImportResultType.xml

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
    svn:mergeinfo = /cxf/trunk:1187376

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java?rev=1187384&r1=1187383&r2=1187384&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java Fri Oct 21 15:02:11 2011
@@ -247,23 +247,17 @@ public class SourceGenerator {
         
     }
     
-    //TODO: similar procedure should work for representation, method and param
-    // thus some of the code here will need to be moved into a sep function to be
-    // reused by relevant handlers
     private Element getResourceElement(Application app, Element resElement,
                                        GrammarInfo gInfo, Set<String> typeClassNames,
                                        String type, File srcDir) {
         if (type.length() > 0) {
             if (type.startsWith("#")) {
-                String refId = type.substring(1);
-                List<Element> resourceTypes = getWadlElements(app.getAppElement(), "resource_type");
-                for (Element resourceType : resourceTypes) {
-                    if (refId.equals(resourceType.getAttribute("id"))) {
-                        Element realElement = (Element)resourceType.cloneNode(true);
-                        DOMUtils.setAttribute(realElement, "id", resElement.getAttribute("id"));
-                        DOMUtils.setAttribute(realElement, "path", resElement.getAttribute("path"));
-                        return realElement;
-                    }
+                Element resourceType = resolveLocalReference(app.getAppElement(), "resource_type", type);
+                if (resourceType != null) {
+                    Element realElement = (Element)resourceType.cloneNode(true);
+                    DOMUtils.setAttribute(realElement, "id", resElement.getAttribute("id"));
+                    DOMUtils.setAttribute(realElement, "path", resElement.getAttribute("path"));
+                    return realElement;
                 }
             } else {
                 URI wadlRef = URI.create(type);
@@ -284,6 +278,27 @@ public class SourceGenerator {
         
     }
     
+    private Element getWadlElement(Element wadlEl) {
+        String href = wadlEl.getAttribute("href");
+        if (href.length() > 0 && href.startsWith("#")) {
+            return resolveLocalReference(wadlEl.getOwnerDocument().getDocumentElement(), 
+                                         wadlEl.getLocalName(), href);
+        } else { 
+            return wadlEl;
+        }
+    }
+    
+    private Element resolveLocalReference(Element appEl, String elementName, String localRef) {
+        String refId = localRef.substring(1);
+        List<Element> resourceTypes = getWadlElements(appEl, elementName);
+        for (Element resourceType : resourceTypes) {
+            if (refId.equals(resourceType.getAttribute("id"))) {
+                return resourceType;
+            }
+        }
+        return null;
+    }
+    
     private GrammarInfo getGrammarInfo(Application app, List<SchemaInfo> schemaElements) {
         
         if (schemaElements == null || schemaElements.isEmpty()) {
@@ -339,8 +354,20 @@ public class SourceGenerator {
         String resourceId = resourceName != null 
             ? resourceName : rElement.getAttribute("id");
         if (resourceId.length() == 0) {
-            resourceId = DEFAULT_RESOURCE_NAME;
+            String path = rElement.getAttribute("path");
+            if (path.length() > 0) {
+                path = path.replaceAll("[\\{\\}_]*", "");
+                String[] split = path.split("/");
+                for (int i = 0; i < split.length; i++) {
+                    if (split[i].length() > 0) {
+                        resourceId += split[i].toUpperCase().charAt(0) + split[i].substring(1);
+                    }
+                }
+            } else {
+                resourceId = DEFAULT_RESOURCE_NAME;    
+            }
         }
+        
         boolean expandedQName = resourceId.startsWith("{") ? true : false;
         QName qname = convertToQName(resourceId, expandedQName);
         String namespaceURI = possiblyConvertNamespaceURI(qname.getNamespaceURI(), expandedQName);
@@ -825,9 +852,19 @@ public class SourceGenerator {
     }
     
     private List<Element> getWadlElements(Element parent, String name) {
-        return parent != null 
+        List<Element> elements = parent != null 
             ? DOMUtils.getChildrenWithName(parent, WadlGenerator.WADL_NS, name)
             : CastUtils.cast(Collections.emptyList(), Element.class);
+        if (!"resource".equals(name)) {    
+            for (int i = 0; i < elements.size(); i++) {
+                Element el = elements.get(i);
+                Element realEl = getWadlElement(el);
+                if (el != realEl) {
+                    elements.set(i, realEl);
+                }
+            }
+        }
+        return elements;
     }
     
     private String getPrimitiveType(Element paramEl) {

Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java?rev=1187384&r1=1187383&r2=1187384&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java Fri Oct 21 15:02:11 2011
@@ -186,7 +186,7 @@ public class JAXRSContainerTest extends 
             
             List<File> files = FileUtils.getFilesRecurse(output, ".+\\." + "class" + "$");
             assertEquals(4, files.size());
-            assertTrue(checkContains(files, "application" + ".Resource.class"));
+            assertTrue(checkContains(files, "application" + ".Bookstore.class"));
             assertTrue(checkContains(files, "superbooks" + ".Book.class"));
             assertTrue(checkContains(files, "superbooks" + ".ObjectFactory.class"));
             assertTrue(checkContains(files, "superbooks" + ".package-info.class"));
@@ -300,6 +300,35 @@ public class JAXRSContainerTest extends 
     }
     
     @Test    
+    public void testCodeGenNoIds2() {
+        try {
+            JAXRSContainer container = new JAXRSContainer(null);
+
+            ToolContext context = new ToolContext();
+            context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
+            context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/multipleResources.xml"));
+            context.put(WadlToolConstants.CFG_COMPILE, "true");
+            
+            container.setContext(context);
+            container.execute();
+
+            assertNotNull(output.list());
+            
+            List<File> javaFiles = FileUtils.getFilesRecurse(output, ".+\\." + "java" + "$");
+            assertEquals(2, javaFiles.size());
+            assertTrue(checkContains(javaFiles, "application.Bookstore.java"));
+            assertTrue(checkContains(javaFiles, "application.Books.java"));
+            List<File> classFiles = FileUtils.getFilesRecurse(output, ".+\\." + "class" + "$");
+            assertEquals(2, classFiles.size());
+            assertTrue(checkContains(classFiles, "application.Bookstore.class"));
+            assertTrue(checkContains(classFiles, "application.Books.class"));
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+    
+    @Test    
     public void testCodeGenWithResourceSet() {
         try {
             JAXRSContainer container = new JAXRSContainer(null);

Modified: cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstoreImportResultType.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstoreImportResultType.xml?rev=1187384&r1=1187383&r2=1187384&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstoreImportResultType.xml (original)
+++ cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstoreImportResultType.xml Fri Oct 21 15:02:11 2011
@@ -23,15 +23,18 @@
     <include href="schemas/book.xsd"/>
  </grammars>
  
+ <method name="POST" id="addBook">
+      <request>
+       <representation mediaType="application/xml" element="prefix1:thebook"/>
+      </request>
+ </method>
+ 
  <resource_type id="main-resource">
     <resource path="/books/{bookid}">
      <param name="bookid" style="template" type="xs:int"/>
      
-     <method name="POST" id="addBook">
-      <request>
-       <representation mediaType="application/xml" element="prefix1:thebook"/>
-      </request>
-     </method>
+     <method href="#addBook"/>
+     
     </resource>
  </resource_type>