cxf-xjc-plugin: try-with-resources for ClassLoader
diff --git a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java
index 513dc79..7d1b44b 100644
--- a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java
+++ b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java
@@ -19,7 +19,6 @@
package org.apache.cxf.maven_plugin;
-import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -103,7 +102,7 @@
urls.add(file.toURI().toURL());
}
}
- for (int x = 0; x < args.length; x++) {
+ for (int x = 0; x < args.length - 1; x++) {
if ("-classpath".equals(args[x])) {
File file = getFile(args[x + 1], listener);
if (file != null && file.exists()) {
@@ -114,101 +113,87 @@
}
}
- final ClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]),
- this.getClass().getClassLoader());
-
- CatalogManager cm = new CatalogManager();
- cm.setUseStaticCatalog(false);
- cm.setIgnoreMissingProperties(true);
- final CatalogResolver catResolver = new CatalogResolver(cm) {
- public InputSource resolveEntity(String publicId, String systemId) {
- String resolved = getResolvedEntity(publicId, systemId);
- if (resolved == null) {
- return null;
- }
- URL url;
- InputSource iSource = new InputSource(resolved);
- iSource.setPublicId(publicId);
- try {
- if (resolved.startsWith("classpath:")) {
- resolved = resolved.substring("classpath:".length());
- url = loader.getResource(resolved);
- iSource.setSystemId(url.toExternalForm());
- } else {
- url = new URL(resolved);
+ try (URLClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]),
+ this.getClass().getClassLoader())) {
+ final CatalogManager cm = new CatalogManager();
+ cm.setUseStaticCatalog(false);
+ cm.setIgnoreMissingProperties(true);
+ final CatalogResolver catResolver = new CatalogResolver(cm) {
+ public InputSource resolveEntity(String publicId, String systemId) {
+ final String resolved = getResolvedEntity(publicId, systemId);
+ if (resolved == null) {
+ return null;
}
- InputStream iStream = url.openStream();
- iSource.setByteStream(iStream);
+ InputSource iSource = new InputSource(resolved);
+ iSource.setPublicId(publicId);
+ try {
+ final URL url;
+ if (resolved.startsWith("classpath:")) {
+ url = loader.getResource(resolved.substring("classpath:".length()));
+ iSource.setSystemId(url.toExternalForm());
+ } else {
+ url = new URL(resolved);
+ }
+ InputStream iStream = url.openStream();
+ iSource.setByteStream(iStream);
- //System.out.println("Resolved: " + publicId + " " + systemId + " " + url);
- return iSource;
- } catch (Exception e) {
- listener.warning(xsdFile, e);
- return null;
+ //System.out.println("Resolved: " + publicId + " " + systemId + " " + url);
+ return iSource;
+ } catch (Exception e) {
+ listener.warning(xsdFile, e);
+ return null;
+ }
}
- }
- };
- final Options opt = new Options() {
- @Override
- public void addCatalog(File catalogFile) throws IOException {
- if (entityResolver == null) {
- entityResolver = catResolver;
+ };
+ final Options opt = new Options() {
+ @Override
+ public void addCatalog(File catalogFile) throws IOException {
+ if (entityResolver == null) {
+ entityResolver = catResolver;
+ }
+ catResolver.getCatalog().parseCatalog(catalogFile.getPath());
}
- catResolver.getCatalog().parseCatalog(catalogFile.getPath());
- }
- };
+ };
- for (URL url : urls) {
- opt.classpaths.add(url);
- }
- if (checkXmlElementRef()) {
- opt.target = SpecVersion.V2_1;
- }
- opt.setSchemaLanguage(Language.XMLSCHEMA);
- // set up the context class loader so that the user-specified plugin
- // on classpath can be loaded from there with jaxb-xjc 2.3.0
- ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
- try {
- Thread.currentThread().setContextClassLoader(opt.getUserClassLoader(origLoader));
- opt.parseArguments(args);
- } finally {
- Thread.currentThread().setContextClassLoader(origLoader);
- }
- Model model = loadModel(opt);
- if (model == null) {
- listener.message(xsdFile, "Failed to create model");
- if (loader instanceof Closeable) {
- ((Closeable)loader).close();
+ for (URL url : urls) {
+ opt.classpaths.add(url);
}
- return -1;
- }
- Outline outline = model.generateCode(opt, listener);
- if (outline == null) {
- listener.message(xsdFile, "Failed to generate code");
- if (loader instanceof Closeable) {
- ((Closeable)loader).close();
+ if (checkXmlElementRef()) {
+ opt.target = SpecVersion.V2_1;
}
- return -1;
- }
+ opt.setSchemaLanguage(Language.XMLSCHEMA);
+ // set up the context class loader so that the user-specified plugin
+ // on classpath can be loaded from there with jaxb-xjc 2.3.0
+ ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(opt.getUserClassLoader(origLoader));
+ opt.parseArguments(args);
+ } finally {
+ Thread.currentThread().setContextClassLoader(origLoader);
+ }
+ Model model = loadModel(opt);
+ if (model == null) {
+ listener.message(xsdFile, "Failed to create model");
+ return -1;
+ }
+ Outline outline = model.generateCode(opt, listener);
+ if (outline == null) {
+ listener.message(xsdFile, "Failed to generate code");
+ return -1;
+ }
- // then print them out
- try {
- CodeWriter cw = opt.createCodeWriter();
- model.codeModel.build(cw);
- } catch (IOException e) {
- listener.error(e);
- if (loader instanceof Closeable) {
- ((Closeable)loader).close();
+ // then print them out
+ try {
+ CodeWriter cw = opt.createCodeWriter();
+ model.codeModel.build(cw);
+ } catch (IOException e) {
+ listener.error(e);
+ return -1;
}
- return -1;
}
- if (loader instanceof Closeable) {
- ((Closeable)loader).close();
- }
- return 0;
+ return 0;
}
-
-
+
private synchronized Class<?> getModelLoaderClass() {
if (modelLoaderClass == null) {
try {