blob: 41118013bcd3f0dd82f40925915c33c3773dd95f [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dclarke - Example MOXy XJC implementation
package org.eclipse.persistence.jaxb.xjc;
import java.io.File;
import java.io.FileWriter;
import org.xml.sax.SAXParseException;
import com.sun.tools.xjc.*;
/**
* Custom XJC implementation that ensures the EclipseLink MOXy-specific
* jaxb.properties file is generated in the package where the classes are
* created.
*
* @author dclarke
* @author rbarkhouse
* @since EclipseLink 1.1.2
*/
public class MOXyXJC {
private MOXyXJC() {
}
/**
* Entry point
* @param args arguments
* @throws Throwable for errors
*/
public static void main(String[] args) throws Throwable {
Listener listener = new Listener();
int compileSuccess = -1;
try {
for(int x=0; x<args.length; x++) {
if("-empty_output".equals(args[x])) {
String[] args2 = new String[args.length - 1];
System.arraycopy(args, 0, args2, 0, x);
System.arraycopy(args, x+1, args2, x, args.length - x - 1);
args = args2;
break;
}
}
compileSuccess = Driver.run(args, listener);
} catch (BadCommandLineException e) {
if (e.getMessage() != null) {
System.out.println(e.getMessage());
System.out.println();
}
Driver.usage(e.getOptions(), false);
System.exit(1);
}
if (compileSuccess == 0) {
String destDir = ".";
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-d")) {
destDir = args[i + 1];
break;
}
}
if(listener.getGeneratedPackagePath() != null) {
File jaxbPropsFile = new File(destDir + File.separator + listener.getGeneratedPackagePath(), "jaxb.properties");
FileWriter writer = new FileWriter(jaxbPropsFile);
writer.write("jakarta.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory");
listener.generatedFile(listener.getGeneratedPackagePath() + File.separator + "jaxb.properties", 0, 0);
writer.close();
}
}
System.exit(compileSuccess);
}
static class Listener extends XJCListener {
private ConsoleErrorReporter cer = new ConsoleErrorReporter(System.err);
private String generatedPackagePath = null;
@Override
public void generatedFile(String fileName, int count, int total) {
message(fileName);
if (this.generatedPackagePath == null) {
this.generatedPackagePath = fileName.substring(0, fileName.lastIndexOf(File.separator));
}
}
public String getGeneratedPackagePath() {
return generatedPackagePath;
}
@Override
public void message(String msg) {
System.out.println(msg);
}
@Override
public void error(SAXParseException exception) {
cer.error(exception);
}
@Override
public void fatalError(SAXParseException exception) {
cer.fatalError(exception);
}
@Override
public void warning(SAXParseException exception) {
cer.warning(exception);
}
@Override
public void info(SAXParseException exception) {
cer.info(exception);
}
}
}