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 2010/06/21 15:54:49 UTC
svn commit: r956592 -
/cxf/xjc-utils/trunk/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
Author: dkulp
Date: Mon Jun 21 13:54:49 2010
New Revision: 956592
URL: http://svn.apache.org/viewvc?rev=956592&view=rev
Log:
Allow xsd plugin to use a classath: style location
Modified:
cxf/xjc-utils/trunk/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
Modified: cxf/xjc-utils/trunk/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
URL: http://svn.apache.org/viewvc/cxf/xjc-utils/trunk/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java?rev=956592&r1=956591&r2=956592&view=diff
==============================================================================
--- cxf/xjc-utils/trunk/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java (original)
+++ cxf/xjc-utils/trunk/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java Mon Jun 21 13:54:49 2010
@@ -21,7 +21,11 @@ package org.apache.cxf.maven_plugin;
import java.io.File;
import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -119,6 +123,37 @@ public abstract class AbstractXSDToJavaM
abstract String getOutputDir();
+
+ private URI mapLocation(String s) throws MojoExecutionException {
+ try {
+ File file = new File(s);
+ URI uri;
+ if (file.exists()) {
+ uri = file.toURI();
+ } else {
+ file = new File(project.getBasedir(), s);
+ if (file.exists()) {
+ uri = file.toURI();
+ } else {
+ uri = new URI(s);
+ }
+ }
+ if ("classpath".equals(uri.getScheme())) {
+ URL url = Thread.currentThread().getContextClassLoader()
+ .getResource(s.substring(10));
+ if (url == null) {
+ url = Thread.currentThread().getContextClassLoader()
+ .getResource(s.substring(11));
+ }
+ if (url != null) {
+ uri = url.toURI();
+ }
+ }
+ return uri;
+ } catch (URISyntaxException e1) {
+ throw new MojoExecutionException("Could not map " + s, e1);
+ }
+ }
public void execute() throws MojoExecutionException {
String outputDir = getOutputDir();
@@ -131,85 +166,82 @@ public abstract class AbstractXSDToJavaM
if (xsdOptions == null) {
throw new MojoExecutionException("Must specify xsdOptions");
}
-
for (int x = 0; x < xsdOptions.length; x++) {
- String[] args = getArguments(xsdOptions[x], outputDir);
-
- String xsdLocation = xsdOptions[x].getXsd();
- File xsdFile = new File(xsdLocation);
- URI basedir = project.getBasedir().toURI();
- URI xsdURI;
- if (xsdFile.exists()) {
- xsdURI = xsdFile.toURI();
- } else {
- xsdURI = basedir.resolve(xsdLocation);
- }
-
- String doneFileName = xsdURI.toString();
- if (doneFileName.startsWith(basedir.toString())) {
- doneFileName = doneFileName.substring(basedir.toString().length());
- }
-
- doneFileName = doneFileName.replace('?', '_')
- .replace('&', '_').replace('/', '_').replace('\\', '_');
-
- // If URL to WSDL, replace ? and & since they're invalid chars for file names
- File doneFile =
- new File(markerDirectory, "." + doneFileName + ".DONE");
-
- long srctimestamp = 0;
- if ("file".equals(xsdURI.getScheme())) {
- srctimestamp = new File(xsdURI).lastModified();
- } else {
- try {
- srctimestamp = xsdURI.toURL().openConnection().getDate();
- } catch (Exception e) {
- //ignore
+ ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ String[] args = getArguments(xsdOptions[x], outputDir);
+ URI xsdURI = mapLocation(xsdOptions[x].getXsd());
+ URI basedir = project.getBasedir().toURI();
+
+ String doneFileName = xsdURI.toString();
+ if (doneFileName.startsWith(basedir.toString())) {
+ doneFileName = doneFileName.substring(basedir.toString().length());
}
- }
-
- boolean doWork = false;
- if (!doneFile.exists()) {
- doWork = true;
- } else if (srctimestamp > doneFile.lastModified()) {
- doWork = true;
- } else {
- File files[] = xsdOptions[x].getDependencies();
- if (files != null) {
- for (int z = 0; z < files.length; ++z) {
- if (files[z].lastModified() > doneFile.lastModified()) {
- doWork = true;
- }
+
+ doneFileName = doneFileName.replace('?', '_')
+ .replace('&', '_').replace('/', '_').replace('\\', '_');
+
+ // If URL to WSDL, replace ? and & since they're invalid chars for file names
+ File doneFile =
+ new File(markerDirectory, "." + doneFileName + ".DONE");
+
+ long srctimestamp = 0;
+ if ("file".equals(xsdURI.getScheme())) {
+ srctimestamp = new File(xsdURI).lastModified();
+ } else {
+ try {
+ srctimestamp = xsdURI.toURL().openConnection().getDate();
+ } catch (Exception e) {
+ //ignore
}
}
- }
-
- if (doWork) {
- try {
- int i = com.sun.tools.xjc.Driver.run(args, System.out, System.err);
- if (i == 0) {
- doneFile.delete();
- doneFile.createNewFile();
+
+ boolean doWork = false;
+ if (!doneFile.exists()) {
+ doWork = true;
+ } else if (srctimestamp > doneFile.lastModified()) {
+ doWork = true;
+ } else {
+ File files[] = xsdOptions[x].getDependencies();
+ if (files != null) {
+ for (int z = 0; z < files.length; ++z) {
+ if (files[z].lastModified() > doneFile.lastModified()) {
+ doWork = true;
+ }
+ }
}
- File dirs[] = xsdOptions[x].getDeleteDirs();
- if (dirs != null) {
- for (int idx = 0; idx < dirs.length; ++idx) {
- result = result && deleteDir(dirs[idx]);
+ }
+
+ if (doWork) {
+ try {
+ int i = com.sun.tools.xjc.Driver.run(args, System.out, System.err);
+ if (i == 0) {
+ doneFile.delete();
+ doneFile.createNewFile();
}
+ File dirs[] = xsdOptions[x].getDeleteDirs();
+ if (dirs != null) {
+ for (int idx = 0; idx < dirs.length; ++idx) {
+ result = result && deleteDir(dirs[idx]);
+ }
+ }
+ } catch (Exception e) {
+ throw new MojoExecutionException(e.getMessage(), e);
}
- } catch (Exception e) {
- throw new MojoExecutionException(e.getMessage(), e);
}
+
+ if (!result) {
+ throw new MojoExecutionException("Could not delete redundant dirs");
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(origLoader);
}
-
- if (!result) {
- throw new MojoExecutionException("Could not delete redundant dirs");
- }
}
}
private String[] getArguments(XsdOption option, String outputDir) throws MojoExecutionException {
+ List<URL> newCp = new ArrayList<URL>();
List<String> list = new ArrayList<String>();
if (extensions != null && extensions.size() > 0) {
Set<Artifact> artifacts = new HashSet<Artifact>();
@@ -236,20 +268,24 @@ public abstract class AbstractXSDToJavaM
localRepository, remoteArtifactRepositories);
list.add("-classpath");
list.add(f.getAbsolutePath());
-
+ newCp.add(f.toURI().toURL());
}
} catch (Exception ex) {
throw new MojoExecutionException("Could not download extension artifact", ex);
}
}
-
+ if (!newCp.isEmpty()) {
+ Thread.currentThread()
+ .setContextClassLoader(new URLClassLoader(newCp.toArray(new URL[newCp.size()]),
+ Thread.currentThread().getContextClassLoader()));
+ }
if (option.getPackagename() != null) {
list.add("-p");
list.add(option.getPackagename());
}
if (option.getBindingFile() != null) {
list.add("-b");
- list.add(option.getBindingFile());
+ list.add(mapLocation(option.getBindingFile()).toString());
}
if (option.getCatalog() != null) {
list.add("-catalog");
@@ -271,7 +307,7 @@ public abstract class AbstractXSDToJavaM
}
list.add("-d");
list.add(outputDir);
- list.add(option.getXsd());
+ list.add(mapLocation(option.getXsd()).toString());
return list.toArray(new String[list.size()]);