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 20:04:55 UTC

svn commit: r1102003 - in /cxf/trunk: common/common/src/main/java/org/apache/cxf/jaxb/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/ tools/common/src/main/java/org/apache/cxf/tools/common/ tools/wadlto/jaxrs/src/main/java/org/apache...

Author: sergeyb
Date: Wed May 11 18:04:54 2011
New Revision: 1102003

URL: http://svn.apache.org/viewvc?rev=1102003&view=rev
Log:
[CXF-3498] Support for optional compilation

Modified:
    cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
    cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/AbstractCXFToolContainer.java
    cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java
    cxf/trunk/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
    cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java?rev=1102003&r1=1102002&r2=1102003&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java Wed May 11 18:04:54 2011
@@ -719,6 +719,18 @@ public final class JAXBUtils {
         logger.log(Level.INFO, "Created classes: " + sb.toString());
     }
     
+    public static List<String> getGeneratedClassNames(JCodeModel codeModel) {
+        List<String> classes = new ArrayList<String>();
+        for (Iterator<JPackage> itr = codeModel.packages(); itr.hasNext();) {
+            JPackage package1 = itr.next();
+            
+            for (Iterator<JDefinedClass> citr = package1.classes(); citr.hasNext();) {
+                classes.add(citr.next().fullName());
+            }
+        }
+        return classes;
+    }
+    
     public static Object createFileCodeWriter(File f) throws JAXBException {
         try {
             Class<?> cls;

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=1102003&r1=1102002&r2=1102003&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 18:04:54 2011
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -75,6 +76,9 @@ import org.apache.cxf.jaxrs.model.wadl.W
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.staxutils.StaxUtils;
 
+/**
+ * TODO: This will need to be moved into a separate module
+ */
 public class SourceGenerator {
     public static final String CODE_TYPE_GRAMMAR = "grammar";
     public static final String CODE_TYPE_PROXY = "proxy";
@@ -115,6 +119,9 @@ public class SourceGenerator {
     
     private Map<String, String> properties; 
     
+    private List<String> generatedServiceClasses = new ArrayList<String>(); 
+    private List<String> generatedTypeClasses = new ArrayList<String>();
+    
     public SourceGenerator() {
         this(Collections.<String, String>emptyMap());
     }
@@ -234,8 +241,13 @@ public class SourceGenerator {
         if (resourceId.length() == 0) {
             resourceId = DEFAULT_RESOURCE_NAME;
         }
+        //TODO: if it's expanded QName then use PackageUtils.getPackageNameByNameSpaceURI
+        // otherwise assume the last segment after the last dot is the name of the class
+        // and the package name is before the last dot
         QName qname = JAXRSUtils.convertStringToQName(resourceId);
-        if (getSchemaClassName(PackageUtils.getPackageNameByNameSpaceURI(qname.getNamespaceURI()), 
+        String namespaceURI = qname.getNamespaceURI();
+        
+        if (getSchemaClassName(PackageUtils.getPackageNameByNameSpaceURI(namespaceURI), 
                                gInfo, qname.getLocalPart(), typeClassNames) != null) {
             return; 
         }
@@ -244,7 +256,7 @@ public class SourceGenerator {
         StringBuilder sbCode = new StringBuilder();
         Set<String> imports = createImports();
         
-        final String classPackage = getClassPackageName(qname.getNamespaceURI());
+        final String classPackage = getClassPackageName(namespaceURI);
         final String className = getClassName(qname.getLocalPart(), interfaceIsGenerated);
         
         sbImports.append(getClassComment()).append(getLineSep());
@@ -667,6 +679,8 @@ public class SourceGenerator {
         String content = sbImports.toString() + getLineSep() + sbCode.toString();
         
         String namespace = qname.getNamespaceURI();
+        generatedServiceClasses.add(namespace + "." + qname.getLocalPart());
+        
         namespace = namespace.replace(".", getFileSep());
         
         File currentDir = new File(src.getAbsolutePath(), namespace);
@@ -697,6 +711,7 @@ public class SourceGenerator {
         try {
             Object writer = JAXBUtils.createFileCodeWriter(src);
             codeModel.build(writer);
+            generatedTypeClasses = JAXBUtils.getGeneratedClassNames(codeModel);
         } catch (Exception e) {
             throw new IllegalStateException("Unable to write generated Java files for schemas: "
                                             + e.getMessage(), e);
@@ -777,6 +792,14 @@ public class SourceGenerator {
         this.resourceName = name;
     }
     
+    public List<String> getGeneratedServiceClasses() {
+        return generatedServiceClasses;    
+    }
+    
+    public List<String> getGeneratedTypeClasses() {
+        return generatedTypeClasses;    
+    }
+    
     private static class GrammarInfo {
         private Map<String, String> nsMap;
         private Map<String, String> elementTypeMap;

Modified: cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/AbstractCXFToolContainer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/AbstractCXFToolContainer.java?rev=1102003&r1=1102002&r2=1102003&view=diff
==============================================================================
--- cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/AbstractCXFToolContainer.java (original)
+++ cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/AbstractCXFToolContainer.java Wed May 11 18:04:54 2011
@@ -37,6 +37,7 @@ import org.apache.cxf.tools.common.tools
 import org.apache.cxf.tools.common.toolspec.parser.CommandDocument;
 import org.apache.cxf.tools.common.toolspec.parser.CommandLineParser;
 import org.apache.cxf.tools.common.toolspec.parser.ErrorVisitor;
+import org.apache.cxf.tools.util.ClassCollector;
 import org.apache.cxf.version.Version;
 
 /**
@@ -282,4 +283,14 @@ public abstract class AbstractCXFToolCon
         return map;
     }
 
+    protected ClassCollector createClassCollector() {
+        ClassCollector collector = new ClassCollector();
+        String reserved[] = (String[])context.get(ToolConstants.CFG_RESERVE_NAME);
+        if (reserved != null) {
+            for (String r : reserved) {
+                collector.reserveClass(r);
+            }
+        }
+        return collector;
+    }
 }

Modified: cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java?rev=1102003&r1=1102002&r2=1102003&view=diff
==============================================================================
--- cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java (original)
+++ cxf/trunk/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainer.java Wed May 11 18:04:54 2011
@@ -22,6 +22,7 @@ package org.apache.cxf.tools.wadlto.jaxr
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.util.List;
 
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxrs.ext.codegen.SourceGenerator;
@@ -30,6 +31,7 @@ import org.apache.cxf.tools.common.Class
 import org.apache.cxf.tools.common.ToolException;
 import org.apache.cxf.tools.common.toolspec.ToolSpec;
 import org.apache.cxf.tools.common.toolspec.parser.BadUsageException;
+import org.apache.cxf.tools.util.ClassCollector;
 import org.apache.cxf.tools.util.URIParserUtil;
 import org.apache.cxf.tools.wadlto.WadlToolConstants;
 
@@ -99,6 +101,24 @@ public class JAXRSContainer extends Abst
         
         // compile 
         if (context.optionSet(WadlToolConstants.CFG_COMPILE)) {
+            ClassCollector collector = createClassCollector();
+            List<String> generatedServiceClasses = sg.getGeneratedServiceClasses();
+            for (String className : generatedServiceClasses) {
+                int index = className.lastIndexOf(".");
+                collector.addServiceClassName(className.substring(0, index), 
+                                              className.substring(index + 1), 
+                                              className);
+            }
+            
+            List<String> generatedTypeClasses = sg.getGeneratedTypeClasses();
+            for (String className : generatedTypeClasses) {
+                int index = className.lastIndexOf(".");
+                collector.addTypesClassName(className.substring(0, index), 
+                                              className.substring(index + 1), 
+                                              className);
+            }
+            
+            context.put(ClassCollector.class, collector);
             new ClassUtils().compile(context);
         }
 

Modified: cxf/trunk/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java?rev=1102003&r1=1102002&r2=1102003&view=diff
==============================================================================
--- cxf/trunk/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java (original)
+++ cxf/trunk/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java Wed May 11 18:04:54 2011
@@ -40,7 +40,7 @@ public class JAXRSContainerTest extends 
             ToolContext context = new ToolContext();
             context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
             context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/bookstore.xml"));
-            //context.put(WadlToolConstants.CFG_COMPILE, "true");
+            context.put(WadlToolConstants.CFG_COMPILE, "true");
 
             container.setContext(context);
             container.execute();
@@ -48,7 +48,7 @@ public class JAXRSContainerTest extends 
             assertNotNull(output.list());
             
             verifyFiles("java", false, "org.apache.cxf.jaxrs.model.wadl");
-            //verifyFiles("class");
+            verifyFiles("class", false, "org.apache.cxf.jaxrs.model.wadl");
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -90,7 +90,7 @@ public class JAXRSContainerTest extends 
             context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
             context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/bookstore.xml"));
             context.put(WadlToolConstants.CFG_PACKAGENAME, "custom.books");
-            //context.put(WadlToolConstants.CFG_COMPILE, "true");
+            context.put(WadlToolConstants.CFG_COMPILE, "true");
 
             container.setContext(context);
             container.execute();
@@ -98,7 +98,7 @@ public class JAXRSContainerTest extends 
             assertNotNull(output.list());
             
             verifyFiles("java", false, "custom.books");
-            //verifyFiles("class");
+            verifyFiles("class", false, "custom.books");
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -115,7 +115,7 @@ public class JAXRSContainerTest extends 
             context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
             context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/bookstore.xml"));
             context.put(WadlToolConstants.CFG_SERVER, "true");
-            //context.put(WadlToolConstants.CFG_COMPILE, "true");
+            context.put(WadlToolConstants.CFG_COMPILE, "true");
             
             container.setContext(context);
             container.execute();
@@ -123,7 +123,7 @@ public class JAXRSContainerTest extends 
             assertNotNull(output.list());
             
             verifyFiles("java", false, "org.apache.cxf.jaxrs.model.wadl");
-            //verifyFiles("classes");
+            verifyFiles("class", false, "org.apache.cxf.jaxrs.model.wadl");
         } catch (Exception e) {
             fail();
             e.printStackTrace();
@@ -140,7 +140,7 @@ public class JAXRSContainerTest extends 
             context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/bookstore.xml"));
             context.put(WadlToolConstants.CFG_INTERFACE, "true");
             context.put(WadlToolConstants.CFG_SERVER, "true");
-            //context.put(WadlToolConstants.CFG_COMPILE, "true");
+            context.put(WadlToolConstants.CFG_COMPILE, "true");
             
             container.setContext(context);
             container.execute();
@@ -148,7 +148,7 @@ public class JAXRSContainerTest extends 
             assertNotNull(output.list());
             
             verifyFiles("java", true, "org.apache.cxf.jaxrs.model.wadl");
-            //verifyFiles("classes");
+            verifyFiles("class", true, "org.apache.cxf.jaxrs.model.wadl");
         } catch (Exception e) {
             fail();
             e.printStackTrace();

Modified: cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java?rev=1102003&r1=1102002&r2=1102003&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java (original)
+++ cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java Wed May 11 18:04:54 2011
@@ -217,14 +217,7 @@ public class WSDLToJavaContainer extends
         
         context.put(ToolConstants.PORTTYPE_MAP, interfaces);
         
-        ClassCollector collector = new ClassCollector();
-        String reserved[] = (String[])context.get(ToolConstants.CFG_RESERVE_NAME);
-        if (reserved != null) {
-            for (String r : reserved) {
-                collector.reserveClass(r);
-            }
-        }
-        context.put(ClassCollector.class, collector);
+        context.put(ClassCollector.class, createClassCollector());
         Processor processor = frontend.getProcessor();
         if (processor instanceof ClassNameProcessor) {
             processor.setEnvironment(context);