You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by cs...@apache.org on 2009/09/03 11:53:50 UTC

svn commit: r810855 - in /cxf/trunk/maven-plugins/codegen-plugin: pom.xml src/main/java/org/apache/cxf/maven_plugin/WSDL2JavaMojo.java src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java

Author: cschneider
Date: Thu Sep  3 09:53:49 2009
New Revision: 810855

URL: http://svn.apache.org/viewvc?rev=810855&view=rev
Log:
CXF-2275 Support reading WSDLs from Maven repository. Implementation finished. We still need an automated  test

Added:
    cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java   (with props)
Modified:
    cxf/trunk/maven-plugins/codegen-plugin/pom.xml
    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

Modified: cxf/trunk/maven-plugins/codegen-plugin/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/pom.xml?rev=810855&r1=810854&r2=810855&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/pom.xml (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/pom.xml Thu Sep  3 09:53:49 2009
@@ -43,6 +43,16 @@
 
         <dependency>
             <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-artifact</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
             <artifactId>maven-plugin-api</artifactId>
             <scope>provided</scope>
         </dependency>

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=810855&r1=810854&r2=810855&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 Thu Sep  3 09:53:49 2009
@@ -29,9 +29,19 @@
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.wsdlto.WSDLToJava;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectUtils;
 
 /**
  * @goal wsdl2java
@@ -120,6 +130,58 @@
     String excludes[];
 
     /**
+     * The local repository taken from Maven's runtime. Typically $HOME/.m2/repository.
+     * 
+     * @parameter expression="${localRepository}"
+     * @readonly
+     * @required
+     */
+    private ArtifactRepository localRepository;
+
+    /**
+     * Artifact factory, needed to create artifacts.
+     * 
+     * @component
+     * @readonly
+     * @required
+     */
+    private ArtifactFactory artifactFactory;
+
+    /**
+     * The remote repositories used as specified in your POM.
+     * 
+     * @parameter expression="${project.repositories}"
+     * @readonly
+     * @required
+     */
+    private List repositories;
+
+    /**
+     * Artifact repository factory component.
+     * 
+     * @component
+     * @readonly
+     * @required
+     */
+    private ArtifactRepositoryFactory artifactRepositoryFactory;
+
+    /**
+     * The Maven session.
+     * 
+     * @parameter expression="${session}"
+     * @readonly
+     * @required
+     */
+    private MavenSession mavenSession;
+
+    /**
+     * @component
+     * @readonly
+     * @required
+     */
+    private ArtifactResolver artifactResolver;
+
+    /**
      * Create WsdlOption objects for each wsdl file found in the root dir. includes, excludes filter which
      * files are considered. The defaultOptions will be applied.
      * 
@@ -150,6 +212,9 @@
      * @return wsdl file
      */
     private File getFileFromWsdlPath(String wsdlPath) {
+        if (wsdlPath == null) {
+            return null;
+        }
         File file = null;
         try {
             URI uri = new URI(wsdlPath);
@@ -182,11 +247,11 @@
             }
 
             File file = getFileFromWsdlPath(o.getWsdl());
-            if (file.exists()) {
+            if (file != null && file.exists()) {
                 file = file.getAbsoluteFile();
                 for (WsdlOption o2 : effectiveWsdlOptions) {
                     File file2 = getFileFromWsdlPath(o2.getWsdl());
-                    if (file2.exists() && file2.getAbsoluteFile().equals(file)) {
+                    if (file2 != null && file2.exists() && file2.getAbsoluteFile().equals(file)) {
                         o.getExtraargs().addAll(0, o2.getExtraargs());
                         effectiveWsdlOptions.remove(o2);
                         break;
@@ -201,7 +266,7 @@
      * @return effective WsdlOptions
      * @throws MojoExecutionException
      */
-    private WsdlOption[] createWsdlOptionsFromWsdlFilesAndExplicitWsdlOptions() 
+    private List<WsdlOption> createWsdlOptionsFromWsdlFilesAndExplicitWsdlOptions()
         throws MojoExecutionException {
         List<WsdlOption> effectiveWsdlOptions = new ArrayList<WsdlOption>();
         if (wsdlRoot != null && wsdlRoot.exists()) {
@@ -214,7 +279,33 @@
         if (wsdlOptions != null) {
             mergeOptions(effectiveWsdlOptions, wsdlOptions);
         }
-        return effectiveWsdlOptions.toArray(new WsdlOption[effectiveWsdlOptions.size()]);
+        downloadRemoteWsdls(effectiveWsdlOptions);
+        return effectiveWsdlOptions;
+    }
+
+    public void downloadRemoteWsdls(List<WsdlOption> effectiveWsdlOptions) throws MojoExecutionException {
+        List remoteRepos;
+        try {
+            remoteRepos = ProjectUtils.buildArtifactRepositories(repositories, artifactRepositoryFactory,
+                                                                 mavenSession.getContainer());
+        } catch (InvalidRepositoryException e) {
+            throw new MojoExecutionException("Error build repositories for remote wsdls", e);
+        }
+        try {
+            for (WsdlOption wsdlOption : effectiveWsdlOptions) {
+                WsdlArtifact wsdlA = wsdlOption.getWsdlArtifact();
+                if (wsdlA != null) {
+                    Artifact artifact = artifactFactory.createArtifact(wsdlA.getGroupId(), wsdlA
+                        .getArtifactId(), wsdlA.getVersion(), Artifact.SCOPE_COMPILE, wsdlA.getType());
+                    artifactResolver.resolve(artifact, remoteRepos, localRepository);
+                    wsdlOption.setWsdl(artifact.getFile().getAbsolutePath());
+                }
+            }
+        } catch (ArtifactResolutionException e) {
+            throw new MojoExecutionException("Error downloading wsdl artifact.", e);
+        } catch (ArtifactNotFoundException e) {
+            throw new MojoExecutionException("Resource can not be found.", e);
+        }
     }
 
     public void execute() throws MojoExecutionException {
@@ -228,9 +319,9 @@
         classesDir.mkdirs();
         markerDirectory.mkdirs();
 
-        WsdlOption[] effectiveWsdlOptions = createWsdlOptionsFromWsdlFilesAndExplicitWsdlOptions();
+        List<WsdlOption> effectiveWsdlOptions = createWsdlOptionsFromWsdlFilesAndExplicitWsdlOptions();
 
-        if (effectiveWsdlOptions.length == 0) {
+        if (effectiveWsdlOptions.size() == 0) {
             getLog().info("Nothing to generate");
             return;
         }

Added: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java?rev=810855&view=auto
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java (added)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java Thu Sep  3 09:53:49 2009
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.maven_plugin;
+
+public class WsdlArtifact {
+    private String groupId;
+    private String artifactId;
+    private String version;
+    private String type;
+    
+    public WsdlArtifact() {
+        type = "wsdl";
+    }
+    
+    public String getGroupId() {
+        return groupId;
+    }
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+    public String getArtifactId() {
+        return artifactId;
+    }
+    public void setArtifactId(String artifactId) {
+        this.artifactId = artifactId;
+    }
+    public String getVersion() {
+        return version;
+    }
+    public void setVersion(String version) {
+        this.version = version;
+    }
+    public String getType() {
+        return type;
+    }
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+}

Propchange: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlArtifact.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=810855&r1=810854&r2=810855&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 Thu Sep  3 09:53:49 2009
@@ -26,6 +26,11 @@
      * The WSDL file to process.
      */
     String wsdl;
+    
+    /**
+     * Alternatively to the wsdl string an artifact can be specified
+     */
+    WsdlArtifact wsdlArtifact;
 
     public String getWsdl() {
         return wsdl;
@@ -34,6 +39,14 @@
     public void setWsdl(String w) {
         wsdl = w;
     }
+
+    public WsdlArtifact getWsdlArtifact() {
+        return wsdlArtifact;
+    }
+
+    public void setWsdlArtifact(WsdlArtifact wsdlArtifact) {
+        this.wsdlArtifact = wsdlArtifact;
+    }
     
     public int hashCode() {
         if (wsdl != null) {