Author: fanningpj
Date: Mon Jun 24 11:12:24 2024
New Revision: 1918538

URL: http://svn.apache.org/viewvc?rev=1918538&view=rev
Log:
[XMLBEANS-652] add sourceCodeEncoding param for schema compilation / code 
generation. Thanks to @whatever098

Modified:
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/Filer.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlOptions.java
    
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
    
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
    
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java
    
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java
    
xmlbeans/trunk/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
    xmlbeans/trunk/src/test/java/compile/scomp/common/mockobj/TestFiler.java
    
xmlbeans/trunk/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java

Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/Filer.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/Filer.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/Filer.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/Filer.java Mon Jun 24 
11:12:24 2024
@@ -43,6 +43,18 @@ public interface Filer
      *
      * @throws IOException when the file can't be created
      */
-    public Writer createSourceFile(String typename) throws IOException;
+    default Writer createSourceFile(String typename) throws IOException {
+        return createSourceFile(typename, null);
+    }
 
+    /**
+     * Creates a new binding source file (.java) and returns a writer for it.
+     *
+     * @param typename fully qualified type name
+     * @param sourceCodeEncoding an optional encoding used when compiling 
source code (can be <code>null</code>)
+     * @return a stream to write the type to
+     *
+     * @throws IOException when the file can't be created
+     */
+    public Writer createSourceFile(String typename, String sourceCodeEncoding) 
throws IOException;
 }

Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlOptions.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlOptions.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlOptions.java (original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/XmlOptions.java Mon Jun 24 
11:12:24 2024
@@ -156,8 +156,7 @@ public class XmlOptions implements java.
         LOAD_USE_LOCALE_CHAR_UTIL,
         XPATH_USE_SAXON,
         XPATH_USE_XMLBEANS,
-        ATTRIBUTE_VALIDATION_COMPAT_MODE,
-
+        ATTRIBUTE_VALIDATION_COMPAT_MODE
     }
 
 
@@ -213,7 +212,6 @@ public class XmlOptions implements java.
         return hasOption(XmlOptionsKeys.SAVE_NAMESPACES_FIRST);
     }
 
-
     /**
      * This option will cause the saver to reformat white space for easier 
reading.
      *

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
 (original)
+++ 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
 Mon Jun 24 11:12:24 2024
@@ -83,7 +83,7 @@ public final class SchemaTypeCodePrinter
     }
 
     private static String makeSafe(String s) {
-        Charset charset = Charset.forName(System.getProperty("file.encoding"));
+        final Charset charset = Charset.defaultCharset();
         CharsetEncoder cEncoder = charset.newEncoder();
         StringBuilder result = new StringBuilder();
         int i;

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
 (original)
+++ 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
 Mon Jun 24 11:12:24 2024
@@ -373,14 +373,14 @@ public class SchemaTypeSystemCompiler {
         types.addAll(Arrays.asList(system.attributeTypes()));
 
 
-        SchemaCodePrinter printer = (options == null) ? null : 
options.getSchemaCodePrinter();
+        SchemaCodePrinter printer = options == null ? null : 
options.getSchemaCodePrinter();
         if (printer == null) {
             printer = new SchemaTypeCodePrinter();
         }
 
         String indexClassName = 
SchemaTypeCodePrinter.indexClassForSystem(system);
 
-        try (Writer out = filer.createSourceFile(indexClassName)) {
+        try (Writer out = filer.createSourceFile(indexClassName, options == 
null ? null : options.getCharacterEncoding())) {
             Repackager repackager = (filer instanceof FilerImpl) ? 
((FilerImpl) filer).getRepackager() : null;
             printer.printHolder(out, system, options, repackager);
         } catch (IOException e) {
@@ -398,7 +398,7 @@ public class SchemaTypeSystemCompiler {
 
             String fjn = type.getFullJavaName();
 
-            try (Writer writer = filer.createSourceFile(fjn)) {
+            try (Writer writer = filer.createSourceFile(fjn, options == null ? 
null : options.getCharacterEncoding())) {
                 // Generate interface class
                 printer.printType(writer, type, options);
             } catch (IOException e) {
@@ -408,7 +408,7 @@ public class SchemaTypeSystemCompiler {
 
             fjn = type.getFullJavaImplName();
 
-            try (Writer writer = filer.createSourceFile(fjn)) {
+            try (Writer writer = filer.createSourceFile(fjn, options == null ? 
null : options.getCharacterEncoding())) {
                 // Generate Implementation class
                 printer.printTypeImpl(writer, type, options);
             } catch (IOException e) {

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
 (original)
+++ 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
 Mon Jun 24 11:12:24 2024
@@ -164,7 +164,8 @@ public class SchemaTypeSystemImpl extend
     private Map<String, SchemaComponent.Ref> _typeRefsByClassname = new 
HashMap<>();
     private Set<String> _namespaces;
 
-
+    // the additional config option
+    private String _sourceCodeEncoding ;
 
     static String nameToPathString(String nameForSystem) {
         nameForSystem = nameForSystem.replace('.', '/');
@@ -416,6 +417,10 @@ public class SchemaTypeSystemImpl extend
         return result;
     }
 
+    String getSourceCodeEncoding() {
+        return _sourceCodeEncoding ;
+    }
+
     @SuppressWarnings("unchecked")
     private <T extends SchemaComponent.Ref> void 
buildContainersHelper(Map<QName, SchemaComponent.Ref> elements, 
BiConsumer<SchemaContainer, T> adder) {
         elements.forEach((k, v) -> 
adder.accept(getContainerNonNull(k.getNamespaceURI()), (T) v));
@@ -620,6 +625,7 @@ public class SchemaTypeSystemImpl extend
         _annotations = state.annotations();
         _namespaces = new HashSet<>(Arrays.asList(state.getNamespaces()));
         _containers = state.getContainerMap();
+        _sourceCodeEncoding  = state.sourceCodeEncoding();
         fixupContainers();
         // Checks that data in the containers matches the lookup maps
         assertContainersSynchronized();

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java 
Mon Jun 24 11:12:24 2024
@@ -103,6 +103,7 @@ public class StscState {
     private boolean _noPvr;
     private boolean _noAnn;
     private boolean _mdefAll;
+    private String _sourceCodeEncoding ;
     private final Set<String> _mdefNamespaces = buildDefaultMdefNamespaces();
     private EntityResolver _entityResolver;
     private File _schemasDir;
@@ -459,6 +460,10 @@ public class StscState {
                  
!"true".equals(SystemProperties.getProperty("xmlbean.schemaannotations", 
"true"));
         _doingDownloads = options.isCompileDownloadUrls() ||
                           
"true".equals(SystemProperties.getProperty("xmlbean.downloadurls", "false"));
+        _sourceCodeEncoding = options.getCharacterEncoding();
+        if (_sourceCodeEncoding == null || _sourceCodeEncoding.isEmpty()) {
+            _sourceCodeEncoding = 
SystemProperties.getProperty("xmlbean.sourcecodeencoding");
+        }
         _entityResolver = options.getEntityResolver();
 
         if (_entityResolver == null) {
@@ -524,6 +529,14 @@ public class StscState {
     }
 
     /**
+     * An optional encoding to use when compiling generated java source file 
(can be <code>null</code>)
+     */
+    // EXPERIMENTAL
+    public String sourceCodeEncoding() {
+        return _sourceCodeEncoding ;
+    }
+
+    /**
      * Get count of recovered errors. Not for public.
      */
     // EXPERIMENTAL

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java 
Mon Jun 24 11:12:24 2024
@@ -22,6 +22,7 @@ import org.apache.xmlbeans.impl.util.Exc
 import java.io.*;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.security.CodeSource;
@@ -88,12 +89,34 @@ public class CodeGenUtil {
      * @deprecated
      */
     public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug) {
-        return externalCompile(srcFiles, outdir, cp, debug, DEFAULT_COMPILER, 
null, DEFAULT_MEM_START, DEFAULT_MEM_MAX, false, false);
+        return externalCompile(srcFiles, outdir, cp, debug, DEFAULT_COMPILER, 
null, DEFAULT_MEM_START, DEFAULT_MEM_MAX,
+            false, false, null);
     }
 
-    // KHK: temporary to avoid build break
-    public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug, String javacPath, String memStart, String memMax, 
boolean quiet, boolean verbose) {
-        return externalCompile(srcFiles, outdir, cp, debug, javacPath, null, 
memStart, memMax, quiet, verbose);
+    /**
+     * Invokes javac on the generated source files in order to turn them
+     * into binary files in the output directory.  This will return a list of
+     * {@code GenFile}s for all of the classes produced or null if an
+     * error occurred.
+     *
+     * @deprecated
+     */
+    public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug, String javacPath, String memStart, String memMax,
+                                          boolean quiet, boolean verbose) {
+        return externalCompile(srcFiles, outdir, cp, debug, javacPath, null, 
memStart, memMax, quiet, verbose, null);
+    }
+
+    /**
+     * Invokes javac on the generated source files in order to turn them
+     * into binary files in the output directory.  This will return a list of
+     * {@code GenFile}s for all of the classes produced or null if an
+     * error occurred.
+     *
+     * @deprecated
+     */
+    public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug, String javacPath, String memStart, String memMax,
+                                          boolean quiet, boolean verbose, 
String sourceCodeEncoding) {
+        return externalCompile(srcFiles, outdir, cp, debug, javacPath, null, 
memStart, memMax, quiet, verbose, sourceCodeEncoding);
     }
 
     /**
@@ -101,8 +124,22 @@ public class CodeGenUtil {
      * into binary files in the output directory.  This will return a list of
      * {@code GenFile}s for all of the classes produced or null if an
      * error occurred.
+     *
+     * @deprecated
      */
-    public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug, String javacPath, String genver, String memStart, 
String memMax, boolean quiet, boolean verbose) {
+    public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug, String javacPath, String genver, String memStart, 
String memMax,
+                                          boolean quiet, boolean verbose) {
+        return externalCompile(srcFiles, outdir, cp, debug, javacPath, genver, 
memStart, memMax, quiet, verbose, null);
+    }
+
+    /**
+     * Invokes javac on the generated source files in order to turn them
+     * into binary files in the output directory.  This will return a list of
+     * {@code GenFile}s for all of the classes produced or null if an
+     * error occurred.
+     */
+    public static boolean externalCompile(List<File> srcFiles, File outdir, 
File[] cp, boolean debug, String javacPath, String genver, String memStart, 
String memMax,
+                                          boolean quiet, boolean verbose, 
String sourceCodeEncoding) {
         List<String> args = new ArrayList<>();
 
         File javac = findJavaTool(javacPath == null ? DEFAULT_COMPILER : 
javacPath);
@@ -120,6 +157,11 @@ public class CodeGenUtil {
             cp = systemClasspath();
         }
 
+        if(sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) {
+            args.add("-encoding");
+            args.add(sourceCodeEncoding);
+        }
+
         if (cp.length > 0) {
             StringBuilder classPath = new StringBuilder();
             // Add the output directory to the classpath.  We do this so that
@@ -160,7 +202,7 @@ public class CodeGenUtil {
         File clFile = null;
         try {
             clFile = Files.createTempFile(IOUtil.getTempDir(), "javac", 
".tmp").toFile();
-            try (Writer fw = Files.newBufferedWriter(clFile.toPath(), 
StandardCharsets.ISO_8859_1)) {
+            try (Writer fw = Files.newBufferedWriter(clFile.toPath(), 
Charset.defaultCharset())) {
                 Iterator<String> i = args.iterator();
                 for (i.next(); i.hasNext(); ) {
                     String arg = i.next();
@@ -228,7 +270,7 @@ public class CodeGenUtil {
             e.printStackTrace(System.err);
             return false;
         } finally {
-            if (clFile != null) {
+            if (!debug && clFile != null) {
                 clFile.delete();
             }
         }
@@ -304,7 +346,7 @@ public class CodeGenUtil {
      * nothing left to read.
      */
     private static Thread copy(InputStream stream, final StringBuilder output) 
{
-        final BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, StandardCharsets.ISO_8859_1));
+        final BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, Charset.defaultCharset()));
         Thread readerThread = new Thread(() ->
             reader.lines().forEach(s -> output.append(s).append("\n"))
         );

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java 
Mon Jun 24 11:12:24 2024
@@ -184,6 +184,14 @@ public class MavenPlugin extends Abstrac
     @Parameter( defaultValue = "false" )
     private boolean copyAnn;
 
+    /**
+     * The source code encoding to use when compiling the generated sources.
+     *
+     * @since 5.2.2
+     */
+    @Parameter
+    private String sourceCodeEncoding;
+
     @Parameter
     private List<Extension> extensions;
 
@@ -301,6 +309,9 @@ public class MavenPlugin extends Abstrac
             params.setOutputJar(outputJar);
             params.setDebug(debug);
             params.setExtensions(extensions);
+            if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) {
+                params.setSourceCodeEncoding(sourceCodeEncoding);
+            }
 
             boolean result = SchemaCompiler.compile(params);
 

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java 
Mon Jun 24 11:12:24 2024
@@ -54,6 +54,7 @@ public class Parameters {
     private boolean noExt;
     private boolean debug;
     private boolean copyAnn;
+    private String sourceCodeEncoding;
     private boolean incrementalSrcGen;
     private String repackage;
     private List<Extension> extensions = Collections.emptyList();
@@ -203,6 +204,10 @@ public class Parameters {
         return noAnn;
     }
 
+    public String getSourceCodeEncoding() {
+        return sourceCodeEncoding;
+    }
+
     public void setNoAnn(boolean noAnn) {
         this.noAnn = noAnn;
     }
@@ -239,6 +244,10 @@ public class Parameters {
         this.debug = debug;
     }
 
+    public void setSourceCodeEncoding(String sourceCodeEncoding) {
+        this.sourceCodeEncoding = sourceCodeEncoding;
+    }
+
     public String getMemoryInitialSize() {
         return memoryInitialSize;
     }

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java 
(original)
+++ 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java 
Mon Jun 24 11:12:24 2024
@@ -67,6 +67,7 @@ public class SchemaCompiler {
         System.out.println("                              processed 
left-to-right, e.g. \"ALL,-GET_LIST\" exclude java.util.List getters - see 
XmlOptions.BeanMethod" );
         System.out.println("    -repackage - repackage specification, e.g. 
\"org.apache.xmlbeans.metadata:mypackage.metadata\" to change the metadata 
directory");
         System.out.println("    -copyann - copy schema annotations to javadoc 
(default false) - don't activate on untrusted schema sources!");
+        System.out.println("    -sourcecodeencoding [encodingName] - Generate 
Java source code with the specified encoding (ISO-8859-1 is the legacy 
default)");
         /* Undocumented feature - pass in one schema compiler extension and 
related parameters
         System.out.println("    -extension - registers a schema compiler 
extension");
         System.out.println("    -extensionParms - specify parameters for the 
compiler extension");
@@ -117,6 +118,7 @@ public class SchemaCompiler {
         opts.add("catalog");
         opts.add("partialMethods");
         opts.add("copyann");
+        opts.add("sourcecodeencoding");
 
         CommandLine cl = new CommandLine(args, flags, opts);
 
@@ -186,6 +188,7 @@ public class SchemaCompiler {
         boolean nojavac = (cl.getOpt("srconly") != null);
         boolean debug = (cl.getOpt("debug") != null);
         boolean copyAnn = (cl.getOpt("copyann") != null);
+        String sourceCodeEncoding = cl.getOpt("sourcecodeencoding");
 
         String allowmdef = cl.getOpt("allowmdef");
         Set<String> mdefNamespaces = (allowmdef == null ? 
Collections.emptySet() :
@@ -333,6 +336,7 @@ public class SchemaCompiler {
         params.setNoVDoc(noVDoc);
         params.setNoExt(noExt);
         params.setDebug(debug);
+        params.setSourceCodeEncoding(sourceCodeEncoding);
         params.setErrorListener(err);
         params.setRepackage(repackage);
         params.setExtensions(extensions);
@@ -356,7 +360,7 @@ public class SchemaCompiler {
 
     private static SchemaTypeSystem loadTypeSystem(String name, File[] 
xsdFiles, File[] wsdlFiles, URL[] urlFiles, File[] configFiles,
                                                    File[] javaFiles, 
ResourceLoader cpResourceLoader,
-                                                   boolean download, boolean 
noUpa, boolean noPvr, boolean noAnn, boolean noVDoc, boolean noExt,
+                                                   boolean download, boolean 
noUpa, boolean noPvr, boolean noAnn, boolean noVDoc, boolean noExt, String 
sourceCodeEncoding,
                                                    Set<String> mdefNamespaces, 
File baseDir, Map<String, String> sourcesToCopyMap,
                                                    Collection<XmlError> 
outerErrorListener, File schemasDir, EntityResolver entResolver, File[] 
classpath) {
         XmlErrorWatcher errorListener = new 
XmlErrorWatcher(outerErrorListener);
@@ -521,6 +525,9 @@ public class SchemaCompiler {
             if (noAnn) {
                 opts.setCompileNoAnnotations();
             }
+            if (sourceCodeEncoding != null ) {
+                opts.setCharacterEncoding(sourceCodeEncoding);
+            }
             if (mdefNamespaces != null) {
                 opts.setCompileMdefNamespaces(mdefNamespaces);
             }
@@ -614,6 +621,7 @@ public class SchemaCompiler {
         boolean noExt = params.isNoExt();
         boolean incrSrcGen = params.isIncrementalSrcGen();
         boolean copyAnn = params.isCopyAnn();
+        String sourceCodeEncoding = params.getSourceCodeEncoding();
         Collection<XmlError> outerErrorListener = params.getErrorListener();
         Set<BeanMethod> partialMethods = params.getPartialMethods();
 
@@ -666,7 +674,7 @@ public class SchemaCompiler {
         // build the in-memory type system
         XmlErrorWatcher errorListener = new 
XmlErrorWatcher(outerErrorListener);
         SchemaTypeSystem system = loadTypeSystem(name, xsdFiles, wsdlFiles, 
urlFiles, configFiles,
-            javaFiles, cpResourceLoader, download, noUpa, noPvr, noAnn, 
noVDoc, noExt, mdefNamespaces,
+            javaFiles, cpResourceLoader, download, noUpa, noPvr, noAnn, 
noVDoc, noExt, sourceCodeEncoding, mdefNamespaces,
             baseDir, sourcesToCopyMap, errorListener, schemasDir, 
cmdLineEntRes, classpath);
         if (errorListener.hasError()) {
             result = false;
@@ -693,6 +701,7 @@ public class SchemaCompiler {
             options.setCompilePartialMethod(partialMethods);
             options.setCompileNoAnnotations(noAnn);
             options.setCompileAnnotationAsJavadoc(copyAnn);
+            options.setCharacterEncoding(sourceCodeEncoding);
 
             // save .xsb files
             system.save(filer);
@@ -722,7 +731,8 @@ public class SchemaCompiler {
                 if (javaFiles != null) {
                     sourcefiles.addAll(java.util.Arrays.asList(javaFiles));
                 }
-                if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, 
classpath, debug, compiler, memoryInitialSize, memoryMaximumSize, quiet, 
verbose)) {
+                if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, 
classpath, debug, compiler, null,
+                    memoryInitialSize, memoryMaximumSize, quiet, verbose, 
sourceCodeEncoding)) {
                     result = false;
                 }
 

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java 
Mon Jun 24 11:12:24 2024
@@ -40,16 +40,7 @@ public class FilerImpl implements Filer
     private final List<File> sourceFiles;
     private final boolean incrSrcGen;
     private Set<String> seenTypes;
-    private static final Charset CHARSET;
-
-    static {
-        Charset temp = null;
-        try {
-            temp = Charset.forName(System.getProperty("file.encoding"));
-        } catch (Exception ignored) {
-        }
-        CHARSET = temp;
-    }
+    private static final Charset DEFAULT_CHARSET = Charset.defaultCharset();
 
     public FilerImpl(File classdir, File srcdir, Repackager repackager, 
boolean verbose, boolean incrSrcGen) {
         this.classdir = classdir;
@@ -85,9 +76,10 @@ public class FilerImpl implements Filer
      * Creates a new binding source file (.java) and returns a writer for it.
      *
      * @param typename fully qualified type name
+     * @param sourceCodeEncoding an optional encoding used when compiling 
source code (can be <code>null</code>)
      * @return a stream to write the type to
      */
-    public Writer createSourceFile(String typename) throws IOException {
+    public Writer createSourceFile(String typename, String sourceCodeEncoding) 
throws IOException {
         if (incrSrcGen) {
             seenTypes.add(typename);
         }
@@ -114,7 +106,7 @@ public class FilerImpl implements Filer
             return new IncrFileWriter(sourcefile, repackager);
         } else {
             return repackager == null ?
-                writerForFile(sourcefile) :
+                writerForFile(sourcefile, sourceCodeEncoding) :
                 new RepackagingWriter(sourcefile, repackager);
         }
     }
@@ -127,17 +119,25 @@ public class FilerImpl implements Filer
         return repackager;
     }
 
-    private static Writer writerForFile(File f) throws IOException {
-        if (CHARSET == null) {
-            return Files.newBufferedWriter(f.toPath(), 
StandardCharsets.ISO_8859_1);
+    private static Writer writerForFile(File f, String sourceCodeEncoding) 
throws IOException {
+        if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) {
+            return Files.newBufferedWriter(f.toPath(), 
getCharset(sourceCodeEncoding));
         }
 
         OutputStream fileStream = Files.newOutputStream(f.toPath());
-        CharsetEncoder ce = CHARSET.newEncoder();
+        CharsetEncoder ce = DEFAULT_CHARSET.newEncoder();
         ce.onUnmappableCharacter(CodingErrorAction.REPORT);
         return new OutputStreamWriter(fileStream, ce);
     }
 
+    private static Charset getCharset(final String sourceCodeEncoding) throws 
IOException {
+        try {
+            return Charset.forName(sourceCodeEncoding);
+        } catch (RuntimeException e) {
+            throw new IOException("Unsupported encoding: " + 
sourceCodeEncoding, e);
+        }
+    }
+
     static class IncrFileWriter extends StringWriter {
         private final File _file;
         private final Repackager _repackager;
@@ -164,7 +164,7 @@ public class FilerImpl implements Filer
 
             if (!diffs.isEmpty()) {
                 // Diffs encountered, replace the file on disk with text from 
the buffer
-                try (Writer fw = writerForFile(_file)) {
+                try (Writer fw = writerForFile(_file, null)) {
                     fw.write(str);
                 }
             }
@@ -180,7 +180,7 @@ public class FilerImpl implements Filer
         public void close() throws IOException {
             super.close();
 
-            try (Writer fw = writerForFile(_file)) {
+            try (Writer fw = writerForFile(_file, null)) {
                 fw.write(_repackager.repackage(getBuffer()).toString());
             }
         }

Modified: 
xmlbeans/trunk/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
 (original)
+++ 
xmlbeans/trunk/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
 Mon Jun 24 11:12:24 2024
@@ -36,6 +36,7 @@ public class XmlBeansCompCheckinTests {
     private final List<XmlError> xm_errors = new ArrayList<>();
     private final XmlOptions xm_opts = new XmlOptions();
     private final List<String> expBinType;
+    private final List<String> expBinShortnameType;
     private final List<String> expSrcType;
 
     public XmlBeansCompCheckinTests() {
@@ -51,6 +52,18 @@ public class XmlBeansCompCheckinTests {
             "org/apache/xmlbeans/metadata/javaname/baz/AType.xsb"
         );
 
+        expBinShortnameType = Arrays.asList(
+            
"org/apache/xmlbeans/metadata/system/apiCompile/atypedb57type.xsb", 
+            
"org/apache/xmlbeans/metadata/system/apiCompile/elnamedocument429edoctype.xsb", 
+            "org/apache/xmlbeans/metadata/system/apiCompile/atypeelement.xsb", 
+            "org/apache/xmlbeans/metadata/system/apiCompile/index.xsb", 
+            
"org/apache/xmlbeans/metadata/element/http_3A_2F_2Fbaz/atypeelement.xsb", 
+            
"org/apache/xmlbeans/metadata/type/http_3A_2F_2Fbaz/atypedb57type.xsb", 
+            
"org/apache/xmlbeans/metadata/namespace/http_3A_2F_2Fbaz/xmlns.xsb",
+            "org/apache/xmlbeans/metadata/javaname/baz/ElNameDocument.xsb", 
+            "org/apache/xmlbeans/metadata/javaname/baz/AType.xsb"
+        );
+
         expSrcType = Arrays.asList(
             "org.apache.xmlbeans.metadata.system.apiCompile.TypeSystemHolder",
             "baz.AType",

Modified: 
xmlbeans/trunk/src/test/java/compile/scomp/common/mockobj/TestFiler.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/test/java/compile/scomp/common/mockobj/TestFiler.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- xmlbeans/trunk/src/test/java/compile/scomp/common/mockobj/TestFiler.java 
(original)
+++ xmlbeans/trunk/src/test/java/compile/scomp/common/mockobj/TestFiler.java 
Mon Jun 24 11:12:24 2024
@@ -48,10 +48,10 @@ public class TestFiler implements Filer
         return impl.createBinaryFile(typename);
     }
 
-    public Writer createSourceFile(String typename) throws IOException {
+    public Writer createSourceFile(String typename, String sourceCodeEncoding) 
throws IOException {
         srcFileVec.add(typename);
         isCreateSourceFile = true;
-        return impl.createSourceFile(typename);
+        return impl.createSourceFile(typename, sourceCodeEncoding);
     }
 
     public boolean isCreateBinaryFile() {

Modified: 
xmlbeans/trunk/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java?rev=1918538&r1=1918537&r2=1918538&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java 
(original)
+++ 
xmlbeans/trunk/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java 
Mon Jun 24 11:12:24 2024
@@ -58,7 +58,7 @@ public class XmlObjectAbstractClassTest
 
         return CodeGenUtil.externalCompile(srcFiles, dir, classpath, false,
             CodeGenUtil.DEFAULT_COMPILER, null, CodeGenUtil.DEFAULT_MEM_START,
-            CodeGenUtil.DEFAULT_MEM_MAX, false, false);
+            CodeGenUtil.DEFAULT_MEM_MAX, false, false, null);
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to