in cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java [177:302]
public void execute() throws MojoExecutionException {
if (isJava9Compatible()) {
fork = true;
additionalJvmArgs =
"--add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED "
+ "--add-exports=java.xml/com.sun.org.apache.xerces.internal.impl.xs=ALL-UNNAMED "
+ "--add-opens java.base/java.security=ALL-UNNAMED "
+ "--add-opens java.base/java.net=ALL-UNNAMED "
+ "--add-opens java.base/java.lang=ALL-UNNAMED "
+ "--add-opens java.base/java.util=ALL-UNNAMED "
+ "--add-opens java.base/java.util.concurrent=ALL-UNNAMED "
+ (additionalJvmArgs == null ? "" : additionalJvmArgs);
}
String outputDir = getOutputDir();
File outputDirFile = new File(outputDir);
outputDirFile.mkdirs();
markerDirectory.mkdirs();
boolean result = true;
if (xsdOptions == null) {
throw new MojoExecutionException("Must specify xsdOptions");
}
for (int x = 0; x < xsdOptions.length; x++) {
ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
final String[] xsdFiles = getXsdFiles(xsdOptions[x].getXsdDir(), xsdOptions[x].getXsd());
for (String xsdFile : xsdFiles) {
try {
URI xsdURI = mapLocation(xsdFile);
URI basedir = project.getBasedir().toURI();
String doneFileName = xsdURI.toString();
if (doneFileName.startsWith(basedir.toString())) {
doneFileName = doneFileName.substring(basedir.toString().length());
}
doneFileName = doneFileName.replace('?', '_')
.replace('&', '_').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 (xsdOptions[x].getBindingFiles() != null) {
for (String bf : xsdOptions[x].getBindingFiles()) {
URI bindingURI = mapLocation(bf);
if ("file".equals(bindingURI.getScheme())) {
long bts = new File(bindingURI).lastModified();
if (bts > srctimestamp) {
srctimestamp = bts;
}
}
}
}
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 (File file : files) {
if (file.lastModified() > doneFile.lastModified()) {
doWork = true;
}
}
}
}
if (doWork) {
try {
File[] files = xsdOptions[x].getDependencies();
if (files != null) {
for (File file : files) {
if (file.lastModified() > doneFile.lastModified()) {
buildContext.removeMessages(file);
}
}
}
removeMessages(xsdFile);
if (xsdOptions[x].getBindingFiles() != null) {
for (String bf : xsdOptions[x].getBindingFiles()) {
removeMessages(bf);
}
}
int i = run(xsdOptions[x], xsdFile, outputDir);
if (i == 0) {
doneFile.delete();
doneFile.createNewFile();
}
File[] dirs = xsdOptions[x].getDeleteDirs();
if (dirs != null) {
for (File dir : dirs) {
result = result && deleteDir(dir);
}
}
buildContext.refresh(outputDirFile);
} catch (Exception e) {
throw new MojoExecutionException(e.getMessage(), e);
}
}
if (!result) {
throw new MojoExecutionException("Could not delete redundant dirs");
}
} finally {
Thread.currentThread().setContextClassLoader(origLoader);
}
}
}
}