You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2011/06/20 17:30:57 UTC

svn commit: r1137664 - in /cxf/trunk: api/src/main/java/org/apache/cxf/tools/common/ maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ systests/wsdl_maven/codegen/ tools/common/src/main/java/org/apache/cxf/tools/common/ tools/wsdl...

Author: dkulp
Date: Mon Jun 20 15:30:56 2011
New Revision: 1137664

URL: http://svn.apache.org/viewvc?rev=1137664&view=rev
Log:
[CXF-3602, CXF-3603, CXF-3604] Add command line switches to enable some
common jaxws customization use cases.

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
    cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java
    cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WSDL2JavaMojo.java
    cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java
    cxf/trunk/systests/wsdl_maven/codegen/pom.xml
    cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolContext.java
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/JAXWSContainer.java
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java
    cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java Mon Jun 20 15:30:56 2011
@@ -66,6 +66,9 @@ public final class ToolConstants {
     public static final String CFG_NO_TYPES = "notypes";
     public static final String CFG_XJC_ARGS = "xjc";
     public static final String CFG_CATALOG = "catalog";
+    public static final String CFG_BAREMETHODS = "bareMethods";
+    public static final String CFG_ASYNCMETHODS = "asyncMethods";
+    public static final String CFG_MIMEMETHODS = "mimeMethods";
     public static final String CFG_DEFAULT_VALUES = "defaultValues";
     public static final String CFG_JAVASCRIPT_UTILS =  "javascriptUtils";
 

Modified: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java Mon Jun 20 15:30:56 2011
@@ -51,6 +51,10 @@ public class Option {
      * For compatibility as well as to specify any extra flags not addressed by other parameters
      */
     protected List<String> xjcargs = new ArrayList<String>();
+    
+    protected String[] asyncMethods;
+    protected String[] bareMethods;
+    protected String[] mimeMethods;
 
     /**
      * Directory where generated java classes will be created. Defaults to plugin 'sourceRoot' parameter
@@ -193,6 +197,25 @@ public class Option {
         this.xjcargs.clear();
         this.xjcargs.addAll(ea);
     }
+    public void setMimeMethods(String[] methods) {
+        mimeMethods = methods;
+    }
+    public String[] getMimeMethods() {
+        return mimeMethods;
+    }
+    public void setAsyncMethods(String[] methods) {
+        asyncMethods = methods;
+    }
+    public String[] getAsyncMethods() {
+        return asyncMethods;
+    }
+    public void setBareMethods(String[] methods) {
+        bareMethods = methods;
+    }
+    public String[] getBareMethods() {
+        return bareMethods;
+    }
+    
 
     public List<String> getPackagenames() {
         return packagenames;
@@ -330,7 +353,7 @@ public class Option {
     }
 
     public String getFaultSerialVersionUID() {
-        return faultSerialVersionUID == null ? "none" : faultSerialVersionUID;
+        return faultSerialVersionUID;
     }
 
     public void setFaultSerialVersionUID(String faultSerialVersionUID) {
@@ -420,6 +443,9 @@ public class Option {
             destination.setWsdlLocation(getWsdlLocation());
         }
         destination.setWsdlVersion(getWsdlVersion());
+        destination.setMimeMethods(getMimeMethods());
+        destination.setAsyncMethods(getAsyncMethods());
+        destination.setBareMethods(getBareMethods());
     }
     
     private <T> T setIfNull(T dest, T source) {
@@ -457,6 +483,9 @@ public class Option {
         redundantDirs = mergeList(redundantDirs, defaultOptions.redundantDirs, File.class);
         packagenames.addAll(defaultOptions.packagenames);
         namespaceExcludes.addAll(defaultOptions.namespaceExcludes);
+        bareMethods = mergeList(bareMethods, defaultOptions.bareMethods, String.class);
+        asyncMethods = mergeList(asyncMethods, defaultOptions.asyncMethods, String.class);
+        mimeMethods = mergeList(mimeMethods, defaultOptions.mimeMethods, String.class);
     }
     
     @SuppressWarnings("unchecked")

Modified: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WSDL2JavaMojo.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WSDL2JavaMojo.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WSDL2JavaMojo.java (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WSDL2JavaMojo.java Mon Jun 20 15:30:56 2011
@@ -636,6 +636,7 @@ public class WSDL2JavaMojo extends Abstr
 
     private void runForked(Set<URI> classPath, Class cls, String[] args) throws MojoExecutionException {
         getLog().info("Running wsdl2java in fork mode...");
+        getLog().debug("Running wsdl2java in fork mode with args " + Arrays.asList(args));
 
         Commandline cmd = new Commandline();
         cmd.getShell().setQuotedArgumentsEnabled(false); // for JVM args

Modified: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java Mon Jun 20 15:30:56 2011
@@ -166,7 +166,11 @@ public class WsdlOption extends Option {
         }
         addIfTrue(list, isWsdlList(), "-wsdlList");
         addIfTrue(list, debug && !list.contains("-verbose"), "-verbose");
+        addEqualsArray(list, "-asyncMethods", getAsyncMethods());
+        addEqualsArray(list, "-bareMethods", getBareMethods());
+        addEqualsArray(list, "-mimeMethods", getMimeMethods());
         list.add(wsdlURI.toString());
+        
         return list;
     }
 
@@ -199,5 +203,25 @@ public class WsdlOption extends Option {
             }
         }
     }
+    private static void addEqualsArray(List<String> destList, 
+                                      String key, 
+                                      String[] sourceList) {
+        if (sourceList == null) {
+            return;
+        }
+        StringBuilder b = new StringBuilder(key);
+        if (sourceList.length > 0) {
+            b.append('=');
+            boolean first = true;
+            for (String value : sourceList) {
+                if (!first) {
+                    b.append(',');
+                }
+                b.append(value);
+                first = false;
+            }
+        }
+        destList.add(b.toString());
+    }
 
 }

Modified: cxf/trunk/systests/wsdl_maven/codegen/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/wsdl_maven/codegen/pom.xml?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/systests/wsdl_maven/codegen/pom.xml (original)
+++ cxf/trunk/systests/wsdl_maven/codegen/pom.xml Mon Jun 20 15:30:56 2011
@@ -53,6 +53,7 @@
                             <fork>${cxf.codegenplugin.forkmode}</fork>
                             <defaultOptions>
                                 <markGenerated>true</markGenerated>
+                                <asyncMethods/>
                             </defaultOptions>
                         </configuration>
                     </execution>

Modified: cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolContext.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolContext.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolContext.java (original)
+++ cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolContext.java Mon Jun 20 15:30:56 2011
@@ -97,6 +97,13 @@ public class ToolContext {
     public Object get(String key) {
         return (paramMap == null) ? null : paramMap.get(key);
     }
+    public String[] getArray(String key) {
+        Object o = get(key);
+        if (o instanceof String) {
+            return new String[] {(String)o};
+        }
+        return (String[])o;
+    }
     
     public Object get(String key, Object defaultValue) {
         if (!optionSet(key)) {

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/JAXWSContainer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/JAXWSContainer.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/JAXWSContainer.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/JAXWSContainer.java Mon Jun 20 15:30:56 2011
@@ -20,7 +20,10 @@
 package org.apache.cxf.tools.wsdlto.frontend.jaxws;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Set;
+import java.util.StringTokenizer;
 
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.resource.URIResolver;
@@ -42,6 +45,9 @@ public class JAXWSContainer extends WSDL
         Set<String> set = super.getArrayKeys();
         set.add(ToolConstants.CFG_BINDING);
         set.add(ToolConstants.CFG_RESERVE_NAME);
+        set.add(ToolConstants.CFG_ASYNCMETHODS);
+        set.add(ToolConstants.CFG_BAREMETHODS);
+        set.add(ToolConstants.CFG_MIMEMETHODS);
         return set;
     }
 
@@ -62,6 +68,24 @@ public class JAXWSContainer extends WSDL
                 }
             }
             env.put(ToolConstants.CFG_BINDING, bindings);
-        }        
+        }
+        cleanArrays(env, ToolConstants.CFG_ASYNCMETHODS);
+        cleanArrays(env, ToolConstants.CFG_BAREMETHODS);
+        cleanArrays(env, ToolConstants.CFG_MIMEMETHODS);
+    }
+
+    private void cleanArrays(ToolContext env, String key) {
+        String s[] = env.getArray(key);
+        if (s != null) {
+            List<String> n = new ArrayList<String>();
+            for (String s2 : s) {
+                StringTokenizer tokenizer = new StringTokenizer(s2, ",=", false);
+                while (tokenizer.hasMoreTokens()) {
+                    String arg = tokenizer.nextToken();
+                    n.add(arg);
+                }
+            }
+            env.put(key, n.toArray(new String[n.size()]));
+        }
     }
 }

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml Mon Jun 20 15:30:56 2011
@@ -302,7 +302,38 @@ Examples:
                 </associatedArgument>
                 <switch>xjc</switch>
             </option>
-            
+            <option id="asyncMethods" maxOccurs="unbounded">
+                <annotation>
+                    Specifies a comma separated list of methods that should have asynchronous
+                    version generated in addition to the normal synchronous versions.  If no
+                    methods are listed, all methods are generated with asynchronous versions.
+                </annotation>
+                <associatedArgument placement="immediate">
+                    <annotation>[=method1,method2,...]</annotation>
+                </associatedArgument>
+                <switch>asyncMethods</switch>
+            </option>
+            <option id="bareMethods" maxOccurs="unbounded">
+                <annotation>
+                    Specifies a comma separated list of methods that should not be
+                    unwrapped into individual parameters and instead be left in
+                    their "bare" form.
+                </annotation>
+                <associatedArgument placement="immediate">
+                    <annotation>[=method1,method2,...]</annotation>
+                </associatedArgument>
+                <switch>bareMethods</switch>
+            </option>
+            <option id="mimeMethods" maxOccurs="unbounded">
+                <annotation>
+                    Specifies a comma separated list of methods where the 
+                    mime:content information is used to generate the type.
+                </annotation>
+                <associatedArgument placement="immediate">
+                    <annotation>[=method1,method2,...]</annotation>
+                </associatedArgument>
+                <switch>mimeMethods</switch>
+            </option>
            <option id="noAddressBinding" maxOccurs="1">
                 <annotation>
                     Specifies that the generator should not use the address jaxb binding file to map wsa:EndpointReferenceType 

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java Mon Jun 20 15:30:56 2011
@@ -130,6 +130,11 @@ public class OperationProcessor  extends
                 enableWrapper = opBinding.isEnableWrapperStyle();
             }
         }
+        
+        enableWrapper = checkEnableWrapper(enableWrapper, method);
+        enableAsync = checkEnableAsync(enableAsync, method);
+        enableMime = checkEnableMime(enableMime, method);
+        
         method.setWrapperStyle(enableWrapper && method.isWrapperStyle());
         
         
@@ -158,6 +163,43 @@ public class OperationProcessor  extends
         }
     }
 
+    private boolean checkArray(String[] ar, String n) {
+        if (ar != null) {
+            if (ar.length == 0) {
+                return true;
+            }
+            for (String s : ar) {
+                if (s.equals(n)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean checkEnableMime(boolean enableMime, JavaMethod method) {
+        String o[] = context.getArray(ToolConstants.CFG_MIMEMETHODS);
+        if (checkArray(o, method.getName())) {
+            return true;
+        }
+        return enableMime;
+    }
+
+    private boolean checkEnableAsync(boolean enableAsync, JavaMethod method) {
+        String o[] = context.getArray(ToolConstants.CFG_ASYNCMETHODS);
+        if (checkArray(o, method.getName())) {
+            return true;
+        }
+        return enableAsync;
+    }
+
+    private boolean checkEnableWrapper(boolean enableWrapper, JavaMethod method) {
+        String o[] = context.getArray(ToolConstants.CFG_BAREMETHODS);
+        if (checkArray(o, method.getName())) {
+            return false;
+        }
+        return enableWrapper;
+    }
 
     private void setWrapper(OperationInfo operation) {
         MessagePartInfo inputPart = null;

Modified: cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java?rev=1137664&r1=1137663&r2=1137664&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java (original)
+++ cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java Mon Jun 20 15:30:56 2011
@@ -324,6 +324,45 @@ public class CodeGenTest extends Abstrac
                      webMethodAnno2.operationName());
 
     }
+    @Test
+    public void testAsyncMethodFromCommandLine() throws Exception {
+        env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
+        env.put(ToolConstants.CFG_ASYNCMETHODS, new String[0]);
+        processor.setContext(env);
+        processor.execute();
+
+        assertNotNull(output);
+
+        File org = new File(output, "org");
+        assertTrue(org.exists());
+        File apache = new File(org, "apache");
+        assertTrue(apache.exists());
+        File cxf = new File(apache, "cxf");
+        assertTrue(cxf.exists());
+        File w2j = new File(cxf, "w2j");
+        assertTrue(w2j.exists());
+        File async = new File(w2j, "hello_world_soap_http");
+        assertTrue(async.exists());
+
+        File[] files = async.listFiles();
+        assertEquals(9, files.length);
+
+        Class<?> clz = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter");
+
+        Method method1 = clz.getMethod("greetMeSometimeAsync", new Class[] {java.lang.String.class,
+                                                                            javax.xml.ws.AsyncHandler.class});
+        WebMethod webMethodAnno1 = AnnotationUtil.getPrivMethodAnnotation(method1, WebMethod.class);
+
+        assertEquals(method1.getName() + "()" + " Annotation : WebMethod.operationName ", "greetMeSometime",
+                     webMethodAnno1.operationName());
+
+        java.lang.reflect.Method method2 = clz.getMethod("greetMeSometimeAsync",
+                                                         new Class[] {java.lang.String.class});
+        WebMethod webMethodAnno2 = AnnotationUtil.getPrivMethodAnnotation(method2, WebMethod.class);
+        assertEquals(method2.getName() + "()" + " Annotation : WebMethod.operationName ", "greetMeSometime",
+                     webMethodAnno2.operationName());
+
+    }
 
     @Test
     public void testAsyncMethodNoService() throws Exception {
@@ -1229,7 +1268,37 @@ public class CodeGenTest extends Abstrac
         assertTrue(contents.indexOf("SOAPBinding.ParameterStyle.BARE") != -1);
         assertTrue(contents.indexOf("@ResponseWrapper") == -1);
     }
+    @Test
+    public void testBareFromCommandLine() throws Exception {
+        env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
+        env.put(ToolConstants.CFG_BAREMETHODS, new String[0]);
 
+        processor.setContext(env);
+        processor.execute();
+
+        File greeter = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/Greeter.java");
+        assertTrue(output.exists());
+        String contents = FileUtils.getStringFromFile(greeter);
+        assertTrue(contents.indexOf("SOAPBinding.ParameterStyle.BARE") != -1);
+        assertTrue(contents.indexOf("@ResponseWrapper") == -1);
+    }
+    @Test
+    public void testMimeFromCommandLine() throws Exception {
+        env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello-mime.wsdl"));
+        env.put(ToolConstants.CFG_MIMEMETHODS, new String[0]);
+
+        processor.setContext(env);
+        processor.execute();
+
+        String str1 = "javax.xml.ws.Holder<java.awt.Image>";
+        String str2 = "javax.xml.transform.Source";
+
+        String file = getStringFromFile(new File(output.getCanonicalPath()
+                                        + "/org/apache/cxf/w2j/hello_world_mime/Hello.java"));
+
+        assertTrue(file.contains(str1));
+        assertTrue(file.contains(str2));
+    }
     @Test
     public void testXmlSeeAlso() throws Exception {
         env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/cardealer.wsdl"));