From 646ccf4e44dd111c0f99b3a5551b187c3d339448 Mon Sep 17 00:00:00 2001 From: s_zhangziang Date: Mon, 17 Jun 2024 11:11:59 +0800 Subject: [PATCH 01/21] [Reason: xmlbeans-REL_5_1_1 does not support Chinese paths (essentially, javac on the win platform does not support Chinese source code paths)] 1.Add two command line parameters to control whether to use the new encoding method to generate Java source code and build the JAR package. 2.Add properties in the options to support the above changes. 3.During compilation, select different generation logic by checking whether the "usecustom" and "useshortname" parameters are present. 4.Add in-code unit tests for verification. --- src/main/java/org/apache/xmlbeans/Filer.java | 4 +- .../java/org/apache/xmlbeans/XmlOptions.java | 53 ++++++++++++++++++- .../xmlbeans/impl/schema/SchemaTypePool.java | 22 +++++++- .../impl/schema/SchemaTypeSystemCompiler.java | 6 +-- .../impl/schema/SchemaTypeSystemImpl.java | 34 +++++++++++- .../xmlbeans/impl/schema/StscState.java | 22 ++++++++ .../xmlbeans/impl/tool/CodeGenUtil.java | 15 ++++-- .../apache/xmlbeans/impl/tool/Parameters.java | 18 +++++++ .../xmlbeans/impl/tool/SchemaCompiler.java | 20 +++++-- .../apache/xmlbeans/impl/util/FilerImpl.java | 13 ++--- .../checkin/XmlBeansCompCheckinTests.java | 32 +++++++++++ .../scomp/common/mockobj/TestFiler.java | 8 ++- .../detailed/XmlObjectAbstractClassTest.java | 2 +- 13 files changed, 222 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/Filer.java b/src/main/java/org/apache/xmlbeans/Filer.java index 5c0076366..28812e035 100755 --- a/src/main/java/org/apache/xmlbeans/Filer.java +++ b/src/main/java/org/apache/xmlbeans/Filer.java @@ -39,10 +39,10 @@ public interface Filer * Creates a new binding source file (.java) and returns a writer for it. * * @param typename fully qualified type name + * @param useCustomEncoding whether use CustomEncoding * @return a stream to write the type to * * @throws IOException when the file can't be created */ - public Writer createSourceFile(String typename) throws IOException; - + public Writer createSourceFile(String typename, boolean useCustomEncoding) throws IOException; } diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index 1799da9b5..f00880084 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -107,6 +107,7 @@ public enum XmlOptionsKeys { SAVE_CDATA_LENGTH_THRESHOLD, SAVE_CDATA_ENTITY_COUNT_THRESHOLD, SAVE_SAX_NO_NSDECLS_IN_ATTRIBUTES, + SAVE_EXTRENAMESPACES, LOAD_REPLACE_DOCUMENT_ELEMENT, LOAD_STRIP_WHITESPACE, LOAD_STRIP_COMMENTS, @@ -157,7 +158,8 @@ public enum XmlOptionsKeys { XPATH_USE_SAXON, XPATH_USE_XMLBEANS, ATTRIBUTE_VALIDATION_COMPAT_MODE, - + USE_CUSTOM_ENCODING, + USE_SHORT_JAVA_NAME } @@ -213,7 +215,6 @@ public boolean isSaveNamespacesFirst() { return hasOption(XmlOptionsKeys.SAVE_NAMESPACES_FIRST); } - /** * This option will cause the saver to reformat white space for easier reading. * @@ -448,6 +449,23 @@ public Map getSaveSuggestedPrefixes() { return (Map) get(XmlOptionsKeys.SAVE_SUGGESTED_PREFIXES); } + /** + * A map of hints to pass to the saver for which prefixes to use + * for which namespace URI. + * + * @param extraNamespaces a map from URIs to prefixes + * @see XmlTokenSource#save(java.io.File, XmlOptions) + * @see XmlTokenSource#xmlText(XmlOptions) + */ + public XmlOptions setSaveExtraNamespaces(Map extraNamespaces) { + return set(XmlOptionsKeys.SAVE_EXTRENAMESPACES, extraNamespaces); + } + + @SuppressWarnings("unchecked") + public Map getSaveExtraNamespaces() { + return (Map) get(XmlOptionsKeys.SAVE_EXTRENAMESPACES); + } + /** * This option causes the saver to filter a Processing Instruction * with the given target @@ -1070,6 +1088,37 @@ public boolean isCompileDownloadUrls() { return hasOption(XmlOptionsKeys.COMPILE_DOWNLOAD_URLS); } + /** + * If this option is set, then the schema compiler will use utf_8 to generate java source file + * + */ + public XmlOptions setCompileUseCustomEncoding() { + return setCompileUseCustomEncoding(true); + } + + public XmlOptions setCompileUseCustomEncoding(boolean b) { + return set(XmlOptionsKeys.USE_CUSTOM_ENCODING, b); + } + + public boolean isCompileUseCustomEncoding() { + return hasOption(XmlOptionsKeys.USE_CUSTOM_ENCODING); + } + + /** + * If this option is set, then the schema compiler will use the java_short_name to generate file name + * + */ + public XmlOptions setCompileUseShortJavaName() { + return setCompileUseShortJavaName(true); + } + + public XmlOptions setCompileUseShortJavaName(boolean b) { + return set(XmlOptionsKeys.USE_SHORT_JAVA_NAME, b); + } + + public boolean isCompileUseShortJavaName() { + return hasOption(XmlOptionsKeys.USE_SHORT_JAVA_NAME); + } /** * If this option is set, then the schema compiler will permit and * ignore multiple definitions of the same component (element, attribute, diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java index 60e6d333e..b80c1cbff 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java @@ -89,7 +89,17 @@ String handleForElement(SchemaGlobalElement element) { } String handle = _componentsToHandles.get(element); if (handle == null) { - handle = addUniqueHandle(element, NameUtil.upperCamelCase(element.getName().getLocalPart()) + "Element"); + if(typeSystem.getUseShortName()) { + SchemaType type = element.getType(); + String javaName = type.getShortJavaName(); + if (javaName != null && !javaName.isEmpty()) { + handle = addUniqueHandle(element, NameUtil.upperCamelCase(javaName) + "Element"); + } else { + handle = addUniqueHandle(element, NameUtil.upperCamelCase(element.getName().getLocalPart()) + "Element"); + } + } else { + handle = addUniqueHandle(element, NameUtil.upperCamelCase(element.getName().getLocalPart()) + "Element"); + } } return handle; } @@ -179,7 +189,15 @@ String handleForType(SchemaType type) { if (name == null) { baseName = "Anon" + uniq + "Type"; } else { - baseName = NameUtil.upperCamelCase(name.getLocalPart()) + uniq + suffix + "Type"; + if(typeSystem.getUseShortName()) { + String javaName = type.getShortJavaName(); + if (javaName == null || javaName.isEmpty()) + javaName = name.getLocalPart(); + baseName = NameUtil.upperCamelCase(javaName) + uniq + suffix + "Type"; + } + else { + baseName = NameUtil.upperCamelCase(name.getLocalPart()) + uniq + suffix + "Type"; + } } handle = addUniqueHandle(type, baseName); diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java index 528a51a5a..aa1d91ad3 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java @@ -380,7 +380,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String indexClassName = SchemaTypeCodePrinter.indexClassForSystem(system); - try (Writer out = filer.createSourceFile(indexClassName)) { + try (Writer out = filer.createSourceFile(indexClassName, (options == null) ? false : options.isCompileUseCustomEncoding())) { Repackager repackager = (filer instanceof FilerImpl) ? ((FilerImpl) filer).getRepackager() : null; printer.printHolder(out, system, options, repackager); } catch (IOException e) { @@ -398,7 +398,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String fjn = type.getFullJavaName(); - try (Writer writer = filer.createSourceFile(fjn)) { + try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileUseCustomEncoding())) { // Generate interface class printer.printType(writer, type, options); } catch (IOException e) { @@ -408,7 +408,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt fjn = type.getFullJavaImplName(); - try (Writer writer = filer.createSourceFile(fjn)) { + try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileUseCustomEncoding())) { // Generate Implementation class printer.printTypeImpl(writer, type, options); } catch (IOException e) { diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java index 4c2734a5b..20bad2f1e 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java @@ -164,7 +164,9 @@ public class SchemaTypeSystemImpl extends SchemaTypeLoaderBase implements Schema private Map _typeRefsByClassname = new HashMap<>(); private Set _namespaces; - + // the additional config option + private boolean _useCustom; + private boolean _useShortName; static String nameToPathString(String nameForSystem) { nameForSystem = nameForSystem.replace('.', '/'); @@ -317,7 +319,25 @@ void savePointers() { void savePointersForComponents(SchemaComponent[] components, String dir) { for (SchemaComponent component : components) { - savePointerFile(dir + QNameHelper.hexsafedir(component.getName()), _name); + if(_useShortName) { + String javaName = _localHandles.handleForComponent(component); + if (javaName != null && !javaName.isEmpty()) + { + QName nameTemp = component.getName(); + String resultName; + if (nameTemp.getNamespaceURI() == null || nameTemp.getNamespaceURI().length() == 0) { + resultName = "_nons/" + QNameHelper.hexsafe(javaName); + } else { + resultName = QNameHelper.hexsafe(nameTemp.getNamespaceURI()) + "/" + + QNameHelper.hexsafe(javaName); + } + savePointerFile(dir + resultName, _name); + } else { + savePointerFile(dir + QNameHelper.hexsafedir(component.getName()), _name); + } + } else { + savePointerFile(dir + QNameHelper.hexsafedir(component.getName()), _name); + } } } @@ -416,6 +436,14 @@ SchemaContainer getContainerNonNull(String namespace) { return result; } + Boolean getUseCustomEncoding(){ + return _useCustom; + } + + Boolean getUseShortName(){ + return _useShortName; + } + @SuppressWarnings("unchecked") private void buildContainersHelper(Map elements, BiConsumer adder) { elements.forEach((k, v) -> adder.accept(getContainerNonNull(k.getNamespaceURI()), (T) v)); @@ -620,6 +648,8 @@ public void loadFromStscState(StscState state) { _annotations = state.annotations(); _namespaces = new HashSet<>(Arrays.asList(state.getNamespaces())); _containers = state.getContainerMap(); + _useShortName = state.useShortName(); + _useCustom = state.useCustom(); fixupContainers(); // Checks that data in the containers matches the lookup maps assertContainersSynchronized(); diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java index b61220c79..2bdb312ad 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java @@ -103,6 +103,8 @@ public class StscState { private boolean _noPvr; private boolean _noAnn; private boolean _mdefAll; + private boolean _useShortName; + private boolean _useCustom; private final Set _mdefNamespaces = buildDefaultMdefNamespaces(); private EntityResolver _entityResolver; private File _schemasDir; @@ -459,6 +461,10 @@ public void setOptions(XmlOptions options) { !"true".equals(SystemProperties.getProperty("xmlbean.schemaannotations", "true")); _doingDownloads = options.isCompileDownloadUrls() || "true".equals(SystemProperties.getProperty("xmlbean.downloadurls", "false")); + _useCustom = options.isCompileUseCustomEncoding() || + "true".equals(SystemProperties.getProperty("xmlbean.usecustomencoding", "false")); + _useShortName = options.isCompileUseShortJavaName() || + "true".equals(SystemProperties.getProperty("xmlbean.useshortjavaname", "false")); _entityResolver = options.getEntityResolver(); if (_entityResolver == null) { @@ -523,6 +529,22 @@ public boolean allowPartial() { return _allowPartial; } + /** + * True if use customEncoding to generate the java source file + */ + // EXPERIMENTAL + public boolean useCustom() { + return _useCustom; + } + + /** + * True if use the java_short_name to generate file name + */ + // EXPERIMENTAL + public boolean useShortName() { + return _useShortName; + } + /** * Get count of recovered errors. Not for public. */ diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java index 900e5f1e3..34aa004d6 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java @@ -88,12 +88,12 @@ static private String quoteAndEscapeFilename(String filename) { * @deprecated */ public static boolean externalCompile(List 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, false); } // KHK: temporary to avoid build break - public static boolean externalCompile(List 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); + public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String memStart, String memMax, boolean quiet, boolean verbose, boolean useCustom) { + return externalCompile(srcFiles, outdir, cp, debug, javacPath, null, memStart, memMax, quiet, verbose, useCustom); } /** @@ -102,7 +102,7 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c * {@code GenFile}s for all of the classes produced or null if an * error occurred. */ - public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String genver, String memStart, String memMax, boolean quiet, boolean verbose) { + public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String genver, String memStart, String memMax, boolean quiet, boolean verbose, boolean useCustom) { List args = new ArrayList<>(); File javac = findJavaTool(javacPath == null ? DEFAULT_COMPILER : javacPath); @@ -120,6 +120,11 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c cp = systemClasspath(); } + if(useCustom) { + args.add("-encoding"); + args.add("utf-8"); + } + if (cp.length > 0) { StringBuilder classPath = new StringBuilder(); // Add the output directory to the classpath. We do this so that @@ -160,7 +165,7 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c 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(), useCustom ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1)) { Iterator i = args.iterator(); for (i.next(); i.hasNext(); ) { String arg = i.next(); diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java index 9f496a0c5..b7346eb9d 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java @@ -54,6 +54,8 @@ public class Parameters { private boolean noExt; private boolean debug; private boolean copyAnn; + private boolean useShortName; + private boolean useCustom; private boolean incrementalSrcGen; private String repackage; private List extensions = Collections.emptyList(); @@ -203,6 +205,14 @@ public boolean isNoAnn() { return noAnn; } + public boolean isUseShortName() { + return useShortName; + } + + public boolean isUseCustom() { + return useCustom; + } + public void setNoAnn(boolean noAnn) { this.noAnn = noAnn; } @@ -239,6 +249,14 @@ public void setDebug(boolean debug) { this.debug = debug; } + public void setUseShortName(boolean useShortName) { + this.useShortName = useShortName; + } + + public void setUseCustom(boolean useCustom) { + this.useCustom = useCustom; + } + public String getMemoryInitialSize() { return memoryInitialSize; } diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 449453990..f72d5048f 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -186,6 +186,8 @@ public static void main(String[] args) { boolean nojavac = (cl.getOpt("srconly") != null); boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); + boolean useCustom = (cl.getOpt("usecustom") != null); + boolean useShortName = (cl.getOpt("useshortname") != null); String allowmdef = cl.getOpt("allowmdef"); Set mdefNamespaces = (allowmdef == null ? Collections.emptySet() : @@ -333,6 +335,8 @@ public static void main(String[] args) { params.setNoVDoc(noVDoc); params.setNoExt(noExt); params.setDebug(debug); + params.setUseCustom(useCustom); + params.setUseShortName(useShortName); params.setErrorListener(err); params.setRepackage(repackage); params.setExtensions(extensions); @@ -356,7 +360,7 @@ public static void main(String[] args) { 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, boolean useCustom, boolean useShortName, Set mdefNamespaces, File baseDir, Map sourcesToCopyMap, Collection outerErrorListener, File schemasDir, EntityResolver entResolver, File[] classpath) { XmlErrorWatcher errorListener = new XmlErrorWatcher(outerErrorListener); @@ -521,6 +525,12 @@ private static SchemaTypeSystem loadTypeSystem(String name, File[] xsdFiles, Fil if (noAnn) { opts.setCompileNoAnnotations(); } + if (useCustom) { + opts.setCompileUseCustomEncoding(); + } + if (useShortName) { + opts.setCompileUseShortJavaName(); + } if (mdefNamespaces != null) { opts.setCompileMdefNamespaces(mdefNamespaces); } @@ -614,6 +624,8 @@ public static boolean compile(Parameters params) { boolean noExt = params.isNoExt(); boolean incrSrcGen = params.isIncrementalSrcGen(); boolean copyAnn = params.isCopyAnn(); + boolean useCustom = params.isUseCustom(); + boolean useShortName = params.isUseShortName(); Collection outerErrorListener = params.getErrorListener(); Set partialMethods = params.getPartialMethods(); @@ -666,7 +678,7 @@ public static boolean compile(Parameters params) { // 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, useCustom, useShortName, mdefNamespaces, baseDir, sourcesToCopyMap, errorListener, schemasDir, cmdLineEntRes, classpath); if (errorListener.hasError()) { result = false; @@ -693,6 +705,8 @@ public static boolean compile(Parameters params) { options.setCompilePartialMethod(partialMethods); options.setCompileNoAnnotations(noAnn); options.setCompileAnnotationAsJavadoc(copyAnn); + options.setCompileUseCustomEncoding(useCustom); + options.setCompileUseShortJavaName(useShortName); // save .xsb files system.save(filer); @@ -722,7 +736,7 @@ public static boolean compile(Parameters params) { 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, memoryInitialSize, memoryMaximumSize, quiet, verbose, useCustom)) { result = false; } diff --git a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java index e099a0605..4a2319a22 100755 --- a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java @@ -85,9 +85,10 @@ public OutputStream createBinaryFile(String typename) throws IOException { * Creates a new binding source file (.java) and returns a writer for it. * * @param typename fully qualified type name + * @param useCustomEncoding whether use CustomEncoding * @return a stream to write the type to */ - public Writer createSourceFile(String typename) throws IOException { + public Writer createSourceFile(String typename, boolean useCustomEncoding) throws IOException { if (incrSrcGen) { seenTypes.add(typename); } @@ -114,7 +115,7 @@ public Writer createSourceFile(String typename) throws IOException { return new IncrFileWriter(sourcefile, repackager); } else { return repackager == null ? - writerForFile(sourcefile) : + writerForFile(sourcefile, useCustomEncoding) : new RepackagingWriter(sourcefile, repackager); } } @@ -127,9 +128,9 @@ public Repackager getRepackager() { return repackager; } - private static Writer writerForFile(File f) throws IOException { + private static Writer writerForFile(File f, boolean useCustomEncoding) throws IOException { if (CHARSET == null) { - return Files.newBufferedWriter(f.toPath(), StandardCharsets.ISO_8859_1); + return Files.newBufferedWriter(f.toPath(), useCustomEncoding ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1); } OutputStream fileStream = Files.newOutputStream(f.toPath()); @@ -164,7 +165,7 @@ public void close() throws IOException { 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, false)) { fw.write(str); } } @@ -180,7 +181,7 @@ public RepackagingWriter(File file, Repackager repackager) { public void close() throws IOException { super.close(); - try (Writer fw = writerForFile(_file)) { + try (Writer fw = writerForFile(_file, false)) { fw.write(_repackager.repackage(getBuffer()).toString()); } } diff --git a/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java b/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java index ab69f54ad..327877c76 100644 --- a/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java +++ b/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java @@ -36,6 +36,7 @@ public class XmlBeansCompCheckinTests { private final List xm_errors = new ArrayList<>(); private final XmlOptions xm_opts = new XmlOptions(); private final List expBinType; + private final List expBinShortnameType; private final List expSrcType; public XmlBeansCompCheckinTests() { @@ -51,6 +52,18 @@ public 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", @@ -86,6 +99,25 @@ void test_Filer_compilation() throws Exception { MatcherAssert.assertThat(f.getSrcFileVec(), is(expSrcType)); } + @Test + void test_Filer_shortname_compilation() throws Exception { + XmlObject obj1 = XmlObject.Factory.parse(FOR_XSD); + XmlObject[] schemas = new XmlObject[]{obj1}; + + TestFiler f = new TestFiler(); + xm_opts.setCompileUseShortJavaName(); + XmlBeans.compileXmlBeans("apiCompile", null, schemas, null, XmlBeans.getBuiltinTypeSystem(), f, xm_opts); + + assertTrue(f.isCreateBinaryFile(), "Binary File method not invoked"); + assertTrue(f.isCreateSourceFile(), "Source File method not invoked"); + + assertNotNull(f.getBinFileVec()); + MatcherAssert.assertThat(f.getBinFileVec(), is(expBinShortnameType)); + + assertNotNull(f.getSrcFileVec()); + MatcherAssert.assertThat(f.getSrcFileVec(), is(expSrcType)); + } + /** * Verify Partial SOM cannot be saved to file system */ diff --git a/src/test/java/compile/scomp/common/mockobj/TestFiler.java b/src/test/java/compile/scomp/common/mockobj/TestFiler.java index 1382333eb..10bda6da1 100644 --- a/src/test/java/compile/scomp/common/mockobj/TestFiler.java +++ b/src/test/java/compile/scomp/common/mockobj/TestFiler.java @@ -51,7 +51,13 @@ public OutputStream createBinaryFile(String typename) throws IOException { public Writer createSourceFile(String typename) throws IOException { srcFileVec.add(typename); isCreateSourceFile = true; - return impl.createSourceFile(typename); + return impl.createSourceFile(typename, false); + } + + public Writer createSourceFile(String typename, boolean useCustom) throws IOException { + srcFileVec.add(typename); + isCreateSourceFile = true; + return impl.createSourceFile(typename, useCustom); } public boolean isCreateBinaryFile() { diff --git a/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java b/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java index 016ede357..a696892b3 100755 --- a/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java +++ b/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java @@ -58,7 +58,7 @@ private boolean compileFile(File source) { 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, false); } /** From 30e6188cf49285ea07e19795fc2d6a03566ea7e4 Mon Sep 17 00:00:00 2001 From: s_zhangziang Date: Tue, 18 Jun 2024 14:55:03 +0800 Subject: [PATCH 02/21] Fix naming issues --- src/main/java/org/apache/xmlbeans/Filer.java | 4 ++-- .../java/org/apache/xmlbeans/XmlOptions.java | 20 +++++++++---------- .../impl/schema/SchemaTypeSystemCompiler.java | 6 +++--- .../impl/schema/SchemaTypeSystemImpl.java | 8 ++++---- .../xmlbeans/impl/schema/StscState.java | 10 +++++----- .../xmlbeans/impl/tool/CodeGenUtil.java | 10 +++++----- .../apache/xmlbeans/impl/tool/Parameters.java | 10 +++++----- .../xmlbeans/impl/tool/SchemaCompiler.java | 18 ++++++++--------- .../apache/xmlbeans/impl/util/FilerImpl.java | 10 +++++----- .../scomp/common/mockobj/TestFiler.java | 4 ++-- 10 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/Filer.java b/src/main/java/org/apache/xmlbeans/Filer.java index 28812e035..cf4008259 100755 --- a/src/main/java/org/apache/xmlbeans/Filer.java +++ b/src/main/java/org/apache/xmlbeans/Filer.java @@ -39,10 +39,10 @@ public interface Filer * Creates a new binding source file (.java) and returns a writer for it. * * @param typename fully qualified type name - * @param useCustomEncoding whether use CustomEncoding + * @param sourceCodeEncoding whether use CustomEncoding * @return a stream to write the type to * * @throws IOException when the file can't be created */ - public Writer createSourceFile(String typename, boolean useCustomEncoding) throws IOException; + public Writer createSourceFile(String typename, boolean sourceCodeEncoding ) throws IOException; } diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index f00880084..ba73fc4ec 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -107,7 +107,7 @@ public enum XmlOptionsKeys { SAVE_CDATA_LENGTH_THRESHOLD, SAVE_CDATA_ENTITY_COUNT_THRESHOLD, SAVE_SAX_NO_NSDECLS_IN_ATTRIBUTES, - SAVE_EXTRENAMESPACES, + SAVE_EXTRA_ENAMESPACES, LOAD_REPLACE_DOCUMENT_ELEMENT, LOAD_STRIP_WHITESPACE, LOAD_STRIP_COMMENTS, @@ -158,7 +158,7 @@ public enum XmlOptionsKeys { XPATH_USE_SAXON, XPATH_USE_XMLBEANS, ATTRIBUTE_VALIDATION_COMPAT_MODE, - USE_CUSTOM_ENCODING, + SOURCE_CODE_ENCODING, USE_SHORT_JAVA_NAME } @@ -458,12 +458,12 @@ public Map getSaveSuggestedPrefixes() { * @see XmlTokenSource#xmlText(XmlOptions) */ public XmlOptions setSaveExtraNamespaces(Map extraNamespaces) { - return set(XmlOptionsKeys.SAVE_EXTRENAMESPACES, extraNamespaces); + return set(XmlOptionsKeys.SAVE_EXTRA_ENAMESPACES, extraNamespaces); } @SuppressWarnings("unchecked") public Map getSaveExtraNamespaces() { - return (Map) get(XmlOptionsKeys.SAVE_EXTRENAMESPACES); + return (Map) get(XmlOptionsKeys.SAVE_EXTRA_ENAMESPACES); } /** @@ -1092,16 +1092,16 @@ public boolean isCompileDownloadUrls() { * If this option is set, then the schema compiler will use utf_8 to generate java source file * */ - public XmlOptions setCompileUseCustomEncoding() { - return setCompileUseCustomEncoding(true); + public XmlOptions setCompileSourceCodeEncoding () { + return setCompileSourceCodeEncoding (true); } - public XmlOptions setCompileUseCustomEncoding(boolean b) { - return set(XmlOptionsKeys.USE_CUSTOM_ENCODING, b); + public XmlOptions setCompileSourceCodeEncoding (boolean b) { + return set(XmlOptionsKeys.SOURCE_CODE_ENCODING, b); } - public boolean isCompileUseCustomEncoding() { - return hasOption(XmlOptionsKeys.USE_CUSTOM_ENCODING); + public boolean isCompileSourceCodeEncoding () { + return hasOption(XmlOptionsKeys.SOURCE_CODE_ENCODING); } /** diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java index aa1d91ad3..7059631e0 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java @@ -380,7 +380,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String indexClassName = SchemaTypeCodePrinter.indexClassForSystem(system); - try (Writer out = filer.createSourceFile(indexClassName, (options == null) ? false : options.isCompileUseCustomEncoding())) { + try (Writer out = filer.createSourceFile(indexClassName, (options == null) ? false : options.isCompileSourceCodeEncoding())) { Repackager repackager = (filer instanceof FilerImpl) ? ((FilerImpl) filer).getRepackager() : null; printer.printHolder(out, system, options, repackager); } catch (IOException e) { @@ -398,7 +398,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String fjn = type.getFullJavaName(); - try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileUseCustomEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileSourceCodeEncoding())) { // Generate interface class printer.printType(writer, type, options); } catch (IOException e) { @@ -408,7 +408,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt fjn = type.getFullJavaImplName(); - try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileUseCustomEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileSourceCodeEncoding())) { // Generate Implementation class printer.printTypeImpl(writer, type, options); } catch (IOException e) { diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java index 20bad2f1e..8f17b2bed 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java @@ -165,7 +165,7 @@ public class SchemaTypeSystemImpl extends SchemaTypeLoaderBase implements Schema private Set _namespaces; // the additional config option - private boolean _useCustom; + private boolean _sourceCodeEncoding ; private boolean _useShortName; static String nameToPathString(String nameForSystem) { @@ -436,8 +436,8 @@ SchemaContainer getContainerNonNull(String namespace) { return result; } - Boolean getUseCustomEncoding(){ - return _useCustom; + Boolean getSourceCodeEncoding (){ + return _sourceCodeEncoding ; } Boolean getUseShortName(){ @@ -649,7 +649,7 @@ public void loadFromStscState(StscState state) { _namespaces = new HashSet<>(Arrays.asList(state.getNamespaces())); _containers = state.getContainerMap(); _useShortName = state.useShortName(); - _useCustom = state.useCustom(); + _sourceCodeEncoding = state.sourceCodeEncoding(); fixupContainers(); // Checks that data in the containers matches the lookup maps assertContainersSynchronized(); diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java index 2bdb312ad..dfb68bceb 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java @@ -104,7 +104,7 @@ public class StscState { private boolean _noAnn; private boolean _mdefAll; private boolean _useShortName; - private boolean _useCustom; + private boolean _sourceCodeEncoding ; private final Set _mdefNamespaces = buildDefaultMdefNamespaces(); private EntityResolver _entityResolver; private File _schemasDir; @@ -461,8 +461,8 @@ public void setOptions(XmlOptions options) { !"true".equals(SystemProperties.getProperty("xmlbean.schemaannotations", "true")); _doingDownloads = options.isCompileDownloadUrls() || "true".equals(SystemProperties.getProperty("xmlbean.downloadurls", "false")); - _useCustom = options.isCompileUseCustomEncoding() || - "true".equals(SystemProperties.getProperty("xmlbean.usecustomencoding", "false")); + _sourceCodeEncoding = options.isCompileSourceCodeEncoding() || + "true".equals(SystemProperties.getProperty("xmlbean.sourcecodeencoding ", "false")); _useShortName = options.isCompileUseShortJavaName() || "true".equals(SystemProperties.getProperty("xmlbean.useshortjavaname", "false")); _entityResolver = options.getEntityResolver(); @@ -533,8 +533,8 @@ public boolean allowPartial() { * True if use customEncoding to generate the java source file */ // EXPERIMENTAL - public boolean useCustom() { - return _useCustom; + public boolean sourceCodeEncoding () { + return _sourceCodeEncoding ; } /** diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java index 34aa004d6..bfa318f9c 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java @@ -92,8 +92,8 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c } // KHK: temporary to avoid build break - public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String memStart, String memMax, boolean quiet, boolean verbose, boolean useCustom) { - return externalCompile(srcFiles, outdir, cp, debug, javacPath, null, memStart, memMax, quiet, verbose, useCustom); + public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String memStart, String memMax, boolean quiet, boolean verbose, boolean sourceCodeEncoding) { + return externalCompile(srcFiles, outdir, cp, debug, javacPath, null, memStart, memMax, quiet, verbose, sourceCodeEncoding); } /** @@ -102,7 +102,7 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c * {@code GenFile}s for all of the classes produced or null if an * error occurred. */ - public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String genver, String memStart, String memMax, boolean quiet, boolean verbose, boolean useCustom) { + public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String genver, String memStart, String memMax, boolean quiet, boolean verbose, boolean sourceCodeEncoding) { List args = new ArrayList<>(); File javac = findJavaTool(javacPath == null ? DEFAULT_COMPILER : javacPath); @@ -120,7 +120,7 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c cp = systemClasspath(); } - if(useCustom) { + if(sourceCodeEncoding) { args.add("-encoding"); args.add("utf-8"); } @@ -165,7 +165,7 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c File clFile = null; try { clFile = Files.createTempFile(IOUtil.getTempDir(), "javac", ".tmp").toFile(); - try (Writer fw = Files.newBufferedWriter(clFile.toPath(), useCustom ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1)) { + try (Writer fw = Files.newBufferedWriter(clFile.toPath(), sourceCodeEncoding ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1)) { Iterator i = args.iterator(); for (i.next(); i.hasNext(); ) { String arg = i.next(); diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java index b7346eb9d..1952d0db2 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java @@ -55,7 +55,7 @@ public class Parameters { private boolean debug; private boolean copyAnn; private boolean useShortName; - private boolean useCustom; + private boolean sourceCodeEncoding; private boolean incrementalSrcGen; private String repackage; private List extensions = Collections.emptyList(); @@ -209,8 +209,8 @@ public boolean isUseShortName() { return useShortName; } - public boolean isUseCustom() { - return useCustom; + public boolean isSourceCodeEncoding() { + return sourceCodeEncoding; } public void setNoAnn(boolean noAnn) { @@ -253,8 +253,8 @@ public void setUseShortName(boolean useShortName) { this.useShortName = useShortName; } - public void setUseCustom(boolean useCustom) { - this.useCustom = useCustom; + public void setSourceCodeEncoding(boolean sourceCodeEncoding) { + this.sourceCodeEncoding = sourceCodeEncoding; } public String getMemoryInitialSize() { diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index f72d5048f..617559197 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -186,7 +186,7 @@ public static void main(String[] args) { boolean nojavac = (cl.getOpt("srconly") != null); boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); - boolean useCustom = (cl.getOpt("usecustom") != null); + boolean sourceCodeEncoding = (cl.getOpt("sourcecodeencoding") != null); boolean useShortName = (cl.getOpt("useshortname") != null); String allowmdef = cl.getOpt("allowmdef"); @@ -335,7 +335,7 @@ public static void main(String[] args) { params.setNoVDoc(noVDoc); params.setNoExt(noExt); params.setDebug(debug); - params.setUseCustom(useCustom); + params.setSourceCodeEncoding(sourceCodeEncoding); params.setUseShortName(useShortName); params.setErrorListener(err); params.setRepackage(repackage); @@ -360,7 +360,7 @@ public static void main(String[] args) { 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 useCustom, boolean useShortName, + boolean download, boolean noUpa, boolean noPvr, boolean noAnn, boolean noVDoc, boolean noExt, boolean sourceCodeEncoding, boolean useShortName, Set mdefNamespaces, File baseDir, Map sourcesToCopyMap, Collection outerErrorListener, File schemasDir, EntityResolver entResolver, File[] classpath) { XmlErrorWatcher errorListener = new XmlErrorWatcher(outerErrorListener); @@ -525,8 +525,8 @@ private static SchemaTypeSystem loadTypeSystem(String name, File[] xsdFiles, Fil if (noAnn) { opts.setCompileNoAnnotations(); } - if (useCustom) { - opts.setCompileUseCustomEncoding(); + if (sourceCodeEncoding) { + opts.setCompileSourceCodeEncoding(); } if (useShortName) { opts.setCompileUseShortJavaName(); @@ -624,7 +624,7 @@ public static boolean compile(Parameters params) { boolean noExt = params.isNoExt(); boolean incrSrcGen = params.isIncrementalSrcGen(); boolean copyAnn = params.isCopyAnn(); - boolean useCustom = params.isUseCustom(); + boolean sourceCodeEncoding = params.isSourceCodeEncoding(); boolean useShortName = params.isUseShortName(); Collection outerErrorListener = params.getErrorListener(); Set partialMethods = params.getPartialMethods(); @@ -678,7 +678,7 @@ public static boolean compile(Parameters params) { // 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, useCustom, useShortName, mdefNamespaces, + javaFiles, cpResourceLoader, download, noUpa, noPvr, noAnn, noVDoc, noExt, sourceCodeEncoding, useShortName, mdefNamespaces, baseDir, sourcesToCopyMap, errorListener, schemasDir, cmdLineEntRes, classpath); if (errorListener.hasError()) { result = false; @@ -705,7 +705,7 @@ public static boolean compile(Parameters params) { options.setCompilePartialMethod(partialMethods); options.setCompileNoAnnotations(noAnn); options.setCompileAnnotationAsJavadoc(copyAnn); - options.setCompileUseCustomEncoding(useCustom); + options.setCompileSourceCodeEncoding(sourceCodeEncoding); options.setCompileUseShortJavaName(useShortName); // save .xsb files @@ -736,7 +736,7 @@ public static boolean compile(Parameters params) { if (javaFiles != null) { sourcefiles.addAll(java.util.Arrays.asList(javaFiles)); } - if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, classpath, debug, compiler, memoryInitialSize, memoryMaximumSize, quiet, verbose, useCustom)) { + if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, classpath, debug, compiler, memoryInitialSize, memoryMaximumSize, quiet, verbose, sourceCodeEncoding)) { result = false; } diff --git a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java index 4a2319a22..6d1da89d3 100755 --- a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java @@ -85,10 +85,10 @@ public OutputStream createBinaryFile(String typename) throws IOException { * Creates a new binding source file (.java) and returns a writer for it. * * @param typename fully qualified type name - * @param useCustomEncoding whether use CustomEncoding + * @param sourceCodeEncoding whether use CustomEncoding * @return a stream to write the type to */ - public Writer createSourceFile(String typename, boolean useCustomEncoding) throws IOException { + public Writer createSourceFile(String typename, boolean sourceCodeEncoding) throws IOException { if (incrSrcGen) { seenTypes.add(typename); } @@ -115,7 +115,7 @@ public Writer createSourceFile(String typename, boolean useCustomEncoding) throw return new IncrFileWriter(sourcefile, repackager); } else { return repackager == null ? - writerForFile(sourcefile, useCustomEncoding) : + writerForFile(sourcefile, sourceCodeEncoding) : new RepackagingWriter(sourcefile, repackager); } } @@ -128,9 +128,9 @@ public Repackager getRepackager() { return repackager; } - private static Writer writerForFile(File f, boolean useCustomEncoding) throws IOException { + private static Writer writerForFile(File f, boolean sourceCodeEncoding) throws IOException { if (CHARSET == null) { - return Files.newBufferedWriter(f.toPath(), useCustomEncoding ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1); + return Files.newBufferedWriter(f.toPath(), sourceCodeEncoding ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1); } OutputStream fileStream = Files.newOutputStream(f.toPath()); diff --git a/src/test/java/compile/scomp/common/mockobj/TestFiler.java b/src/test/java/compile/scomp/common/mockobj/TestFiler.java index 10bda6da1..69bc8b112 100644 --- a/src/test/java/compile/scomp/common/mockobj/TestFiler.java +++ b/src/test/java/compile/scomp/common/mockobj/TestFiler.java @@ -54,10 +54,10 @@ public Writer createSourceFile(String typename) throws IOException { return impl.createSourceFile(typename, false); } - public Writer createSourceFile(String typename, boolean useCustom) throws IOException { + public Writer createSourceFile(String typename, boolean sourceCodeEncoding) throws IOException { srcFileVec.add(typename); isCreateSourceFile = true; - return impl.createSourceFile(typename, useCustom); + return impl.createSourceFile(typename, sourceCodeEncoding); } public boolean isCreateBinaryFile() { From 17670dfe8b28eb648900a243cd5ba215e6512c23 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 16:09:37 +0100 Subject: [PATCH 03/21] refactor new encoding param --- src/main/java/org/apache/xmlbeans/Filer.java | 16 +++++- .../java/org/apache/xmlbeans/XmlOptions.java | 15 ++---- .../xmlbeans/impl/schema/SchemaTypePool.java | 4 +- .../impl/schema/SchemaTypeSystemCompiler.java | 6 +-- .../impl/schema/SchemaTypeSystemImpl.java | 14 ++--- .../xmlbeans/impl/schema/StscState.java | 18 ++++--- .../xmlbeans/impl/tool/CodeGenUtil.java | 53 ++++++++++++++++--- .../apache/xmlbeans/impl/tool/Parameters.java | 6 +-- .../xmlbeans/impl/tool/SchemaCompiler.java | 13 ++--- .../apache/xmlbeans/impl/util/FilerImpl.java | 16 +++--- .../scomp/common/mockobj/TestFiler.java | 8 +-- .../detailed/XmlObjectAbstractClassTest.java | 2 +- 12 files changed, 108 insertions(+), 63 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/Filer.java b/src/main/java/org/apache/xmlbeans/Filer.java index cf4008259..a511e5b77 100755 --- a/src/main/java/org/apache/xmlbeans/Filer.java +++ b/src/main/java/org/apache/xmlbeans/Filer.java @@ -39,10 +39,22 @@ public interface Filer * Creates a new binding source file (.java) and returns a writer for it. * * @param typename fully qualified type name - * @param sourceCodeEncoding whether use CustomEncoding * @return a stream to write the type to * * @throws IOException when the file can't be created */ - public Writer createSourceFile(String typename, boolean sourceCodeEncoding ) 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 null) + * @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; } diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index ba73fc4ec..71b7ba7cc 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -1089,19 +1089,14 @@ public boolean isCompileDownloadUrls() { } /** - * If this option is set, then the schema compiler will use utf_8 to generate java source file - * + * An optional encoding to use when compiling generated source code (can be null). */ - public XmlOptions setCompileSourceCodeEncoding () { - return setCompileSourceCodeEncoding (true); - } - - public XmlOptions setCompileSourceCodeEncoding (boolean b) { - return set(XmlOptionsKeys.SOURCE_CODE_ENCODING, b); + public XmlOptions setCompileSourceCodeEncoding(String enc) { + return set(XmlOptionsKeys.SOURCE_CODE_ENCODING, enc); } - public boolean isCompileSourceCodeEncoding () { - return hasOption(XmlOptionsKeys.SOURCE_CODE_ENCODING); + public String getCompileSourceCodeEncoding() { + return (String) get(XmlOptionsKeys.SOURCE_CODE_ENCODING); } /** diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java index b80c1cbff..1bc84b042 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java @@ -89,7 +89,7 @@ String handleForElement(SchemaGlobalElement element) { } String handle = _componentsToHandles.get(element); if (handle == null) { - if(typeSystem.getUseShortName()) { + if(typeSystem.isUseJavaShortName()) { SchemaType type = element.getType(); String javaName = type.getShortJavaName(); if (javaName != null && !javaName.isEmpty()) { @@ -189,7 +189,7 @@ String handleForType(SchemaType type) { if (name == null) { baseName = "Anon" + uniq + "Type"; } else { - if(typeSystem.getUseShortName()) { + if(typeSystem.isUseJavaShortName()) { String javaName = type.getShortJavaName(); if (javaName == null || javaName.isEmpty()) javaName = name.getLocalPart(); diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java index 7059631e0..bd0281bf7 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java @@ -380,7 +380,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String indexClassName = SchemaTypeCodePrinter.indexClassForSystem(system); - try (Writer out = filer.createSourceFile(indexClassName, (options == null) ? false : options.isCompileSourceCodeEncoding())) { + try (Writer out = filer.createSourceFile(indexClassName, (options == null) ? null : options.getCompileSourceCodeEncoding())) { Repackager repackager = (filer instanceof FilerImpl) ? ((FilerImpl) filer).getRepackager() : null; printer.printHolder(out, system, options, repackager); } catch (IOException e) { @@ -398,7 +398,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String fjn = type.getFullJavaName(); - try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileSourceCodeEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, (options == null) ? null : options.getCompileSourceCodeEncoding())) { // Generate interface class printer.printType(writer, type, options); } catch (IOException e) { @@ -408,7 +408,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt fjn = type.getFullJavaImplName(); - try (Writer writer = filer.createSourceFile(fjn, (options == null) ? false : options.isCompileSourceCodeEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, (options == null) ? null : options.getCompileSourceCodeEncoding())) { // Generate Implementation class printer.printTypeImpl(writer, type, options); } catch (IOException e) { diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java index 8f17b2bed..0699d9f21 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java @@ -165,8 +165,8 @@ public class SchemaTypeSystemImpl extends SchemaTypeLoaderBase implements Schema private Set _namespaces; // the additional config option - private boolean _sourceCodeEncoding ; - private boolean _useShortName; + private String _sourceCodeEncoding ; + private boolean _useJavaShortName; static String nameToPathString(String nameForSystem) { nameForSystem = nameForSystem.replace('.', '/'); @@ -319,7 +319,7 @@ void savePointers() { void savePointersForComponents(SchemaComponent[] components, String dir) { for (SchemaComponent component : components) { - if(_useShortName) { + if(_useJavaShortName) { String javaName = _localHandles.handleForComponent(component); if (javaName != null && !javaName.isEmpty()) { @@ -436,12 +436,12 @@ SchemaContainer getContainerNonNull(String namespace) { return result; } - Boolean getSourceCodeEncoding (){ + String getSourceCodeEncoding() { return _sourceCodeEncoding ; } - Boolean getUseShortName(){ - return _useShortName; + boolean isUseJavaShortName(){ + return _useJavaShortName; } @SuppressWarnings("unchecked") @@ -648,7 +648,7 @@ public void loadFromStscState(StscState state) { _annotations = state.annotations(); _namespaces = new HashSet<>(Arrays.asList(state.getNamespaces())); _containers = state.getContainerMap(); - _useShortName = state.useShortName(); + _useJavaShortName = state.useShortName(); _sourceCodeEncoding = state.sourceCodeEncoding(); fixupContainers(); // Checks that data in the containers matches the lookup maps diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java index dfb68bceb..7780c74db 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java @@ -103,8 +103,8 @@ public class StscState { private boolean _noPvr; private boolean _noAnn; private boolean _mdefAll; - private boolean _useShortName; - private boolean _sourceCodeEncoding ; + private boolean _useJavaShortName; + private String _sourceCodeEncoding ; private final Set _mdefNamespaces = buildDefaultMdefNamespaces(); private EntityResolver _entityResolver; private File _schemasDir; @@ -461,9 +461,11 @@ public void setOptions(XmlOptions options) { !"true".equals(SystemProperties.getProperty("xmlbean.schemaannotations", "true")); _doingDownloads = options.isCompileDownloadUrls() || "true".equals(SystemProperties.getProperty("xmlbean.downloadurls", "false")); - _sourceCodeEncoding = options.isCompileSourceCodeEncoding() || - "true".equals(SystemProperties.getProperty("xmlbean.sourcecodeencoding ", "false")); - _useShortName = options.isCompileUseShortJavaName() || + _sourceCodeEncoding = options.getCharacterEncoding(); + if (_sourceCodeEncoding == null || _sourceCodeEncoding.isEmpty()) { + _sourceCodeEncoding = SystemProperties.getProperty("xmlbean.sourcecodeencoding"); + } + _useJavaShortName = options.isCompileUseShortJavaName() || "true".equals(SystemProperties.getProperty("xmlbean.useshortjavaname", "false")); _entityResolver = options.getEntityResolver(); @@ -530,10 +532,10 @@ public boolean allowPartial() { } /** - * True if use customEncoding to generate the java source file + * An optional encoding to use when compiling generated java source file (can be null) */ // EXPERIMENTAL - public boolean sourceCodeEncoding () { + public String sourceCodeEncoding() { return _sourceCodeEncoding ; } @@ -542,7 +544,7 @@ public boolean sourceCodeEncoding () { */ // EXPERIMENTAL public boolean useShortName() { - return _useShortName; + return _useJavaShortName; } /** diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java index bfa318f9c..2c65d24fe 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java @@ -22,6 +22,7 @@ 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,21 +89,57 @@ static private String quoteAndEscapeFilename(String filename) { * @deprecated */ public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug) { - return externalCompile(srcFiles, outdir, cp, debug, DEFAULT_COMPILER, null, DEFAULT_MEM_START, DEFAULT_MEM_MAX, false, 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 srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String memStart, String memMax, boolean quiet, boolean verbose, boolean sourceCodeEncoding) { + /** + * 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 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 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); } + /** + * 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 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 srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String genver, String memStart, String memMax, boolean quiet, boolean verbose, boolean sourceCodeEncoding) { + public static boolean externalCompile(List srcFiles, File outdir, File[] cp, boolean debug, String javacPath, String genver, String memStart, String memMax, + boolean quiet, boolean verbose, String sourceCodeEncoding) { List args = new ArrayList<>(); File javac = findJavaTool(javacPath == null ? DEFAULT_COMPILER : javacPath); @@ -120,9 +157,9 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c cp = systemClasspath(); } - if(sourceCodeEncoding) { + if(sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) { args.add("-encoding"); - args.add("utf-8"); + args.add(sourceCodeEncoding); } if (cp.length > 0) { @@ -162,10 +199,12 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c addAllJavaFiles(srcFiles, args); + final Charset charset = sourceCodeEncoding == null || sourceCodeEncoding.isEmpty() ? + StandardCharsets.ISO_8859_1 : Charset.forName(sourceCodeEncoding); File clFile = null; try { clFile = Files.createTempFile(IOUtil.getTempDir(), "javac", ".tmp").toFile(); - try (Writer fw = Files.newBufferedWriter(clFile.toPath(), sourceCodeEncoding ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1)) { + try (Writer fw = Files.newBufferedWriter(clFile.toPath(), charset)) { Iterator i = args.iterator(); for (i.next(); i.hasNext(); ) { String arg = i.next(); diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java index 1952d0db2..8ee32c462 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java @@ -55,7 +55,7 @@ public class Parameters { private boolean debug; private boolean copyAnn; private boolean useShortName; - private boolean sourceCodeEncoding; + private String sourceCodeEncoding; private boolean incrementalSrcGen; private String repackage; private List extensions = Collections.emptyList(); @@ -209,7 +209,7 @@ public boolean isUseShortName() { return useShortName; } - public boolean isSourceCodeEncoding() { + public String getSourceCodeEncoding() { return sourceCodeEncoding; } @@ -253,7 +253,7 @@ public void setUseShortName(boolean useShortName) { this.useShortName = useShortName; } - public void setSourceCodeEncoding(boolean sourceCodeEncoding) { + public void setSourceCodeEncoding(String sourceCodeEncoding) { this.sourceCodeEncoding = sourceCodeEncoding; } diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 617559197..b389ebe1b 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -186,7 +186,7 @@ public static void main(String[] args) { boolean nojavac = (cl.getOpt("srconly") != null); boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); - boolean sourceCodeEncoding = (cl.getOpt("sourcecodeencoding") != null); + String sourceCodeEncoding = cl.getOpt("sourcecodeencoding"); boolean useShortName = (cl.getOpt("useshortname") != null); String allowmdef = cl.getOpt("allowmdef"); @@ -360,7 +360,7 @@ public static void main(String[] args) { 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 sourceCodeEncoding, boolean useShortName, + boolean download, boolean noUpa, boolean noPvr, boolean noAnn, boolean noVDoc, boolean noExt, String sourceCodeEncoding, boolean useShortName, Set mdefNamespaces, File baseDir, Map sourcesToCopyMap, Collection outerErrorListener, File schemasDir, EntityResolver entResolver, File[] classpath) { XmlErrorWatcher errorListener = new XmlErrorWatcher(outerErrorListener); @@ -525,8 +525,8 @@ private static SchemaTypeSystem loadTypeSystem(String name, File[] xsdFiles, Fil if (noAnn) { opts.setCompileNoAnnotations(); } - if (sourceCodeEncoding) { - opts.setCompileSourceCodeEncoding(); + if (sourceCodeEncoding != null ) { + opts.setCompileSourceCodeEncoding(sourceCodeEncoding); } if (useShortName) { opts.setCompileUseShortJavaName(); @@ -624,7 +624,7 @@ public static boolean compile(Parameters params) { boolean noExt = params.isNoExt(); boolean incrSrcGen = params.isIncrementalSrcGen(); boolean copyAnn = params.isCopyAnn(); - boolean sourceCodeEncoding = params.isSourceCodeEncoding(); + String sourceCodeEncoding = params.getSourceCodeEncoding(); boolean useShortName = params.isUseShortName(); Collection outerErrorListener = params.getErrorListener(); Set partialMethods = params.getPartialMethods(); @@ -736,7 +736,8 @@ public static boolean compile(Parameters params) { if (javaFiles != null) { sourcefiles.addAll(java.util.Arrays.asList(javaFiles)); } - if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, classpath, debug, compiler, memoryInitialSize, memoryMaximumSize, quiet, verbose, sourceCodeEncoding)) { + if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, classpath, debug, compiler, null, + memoryInitialSize, memoryMaximumSize, quiet, verbose, sourceCodeEncoding)) { result = false; } diff --git a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java index 6d1da89d3..bf23b8471 100755 --- a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java @@ -85,10 +85,10 @@ public OutputStream createBinaryFile(String typename) throws IOException { * Creates a new binding source file (.java) and returns a writer for it. * * @param typename fully qualified type name - * @param sourceCodeEncoding whether use CustomEncoding + * @param sourceCodeEncoding an optional encoding used when compiling source code (can be null) * @return a stream to write the type to */ - public Writer createSourceFile(String typename, boolean sourceCodeEncoding) throws IOException { + public Writer createSourceFile(String typename, String sourceCodeEncoding) throws IOException { if (incrSrcGen) { seenTypes.add(typename); } @@ -128,9 +128,11 @@ public Repackager getRepackager() { return repackager; } - private static Writer writerForFile(File f, boolean sourceCodeEncoding) throws IOException { - if (CHARSET == null) { - return Files.newBufferedWriter(f.toPath(), sourceCodeEncoding ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1); + private static Writer writerForFile(File f, String sourceCodeEncoding) throws IOException { + if (sourceCodeEncoding != null) { + return Files.newBufferedWriter(f.toPath(), Charset.forName(sourceCodeEncoding)); + } else if (CHARSET == null) { + return Files.newBufferedWriter(f.toPath(), StandardCharsets.ISO_8859_1); } OutputStream fileStream = Files.newOutputStream(f.toPath()); @@ -165,7 +167,7 @@ public void close() throws IOException { if (!diffs.isEmpty()) { // Diffs encountered, replace the file on disk with text from the buffer - try (Writer fw = writerForFile(_file, false)) { + try (Writer fw = writerForFile(_file, null)) { fw.write(str); } } @@ -181,7 +183,7 @@ public RepackagingWriter(File file, Repackager repackager) { public void close() throws IOException { super.close(); - try (Writer fw = writerForFile(_file, false)) { + try (Writer fw = writerForFile(_file, null)) { fw.write(_repackager.repackage(getBuffer()).toString()); } } diff --git a/src/test/java/compile/scomp/common/mockobj/TestFiler.java b/src/test/java/compile/scomp/common/mockobj/TestFiler.java index 69bc8b112..8f6c60655 100644 --- a/src/test/java/compile/scomp/common/mockobj/TestFiler.java +++ b/src/test/java/compile/scomp/common/mockobj/TestFiler.java @@ -48,13 +48,7 @@ public OutputStream createBinaryFile(String typename) throws IOException { return impl.createBinaryFile(typename); } - public Writer createSourceFile(String typename) throws IOException { - srcFileVec.add(typename); - isCreateSourceFile = true; - return impl.createSourceFile(typename, false); - } - - public Writer createSourceFile(String typename, boolean sourceCodeEncoding) throws IOException { + public Writer createSourceFile(String typename, String sourceCodeEncoding) throws IOException { srcFileVec.add(typename); isCreateSourceFile = true; return impl.createSourceFile(typename, sourceCodeEncoding); diff --git a/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java b/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java index a696892b3..b1ba5e28b 100755 --- a/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java +++ b/src/test/java/xmlobject/detailed/XmlObjectAbstractClassTest.java @@ -58,7 +58,7 @@ private boolean compileFile(File source) { return CodeGenUtil.externalCompile(srcFiles, dir, classpath, false, CodeGenUtil.DEFAULT_COMPILER, null, CodeGenUtil.DEFAULT_MEM_START, - CodeGenUtil.DEFAULT_MEM_MAX, false, false, false); + CodeGenUtil.DEFAULT_MEM_MAX, false, false, null); } /** From 6e01353b0b04418da843d64f3d77b7ea3f7a6e71 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 16:14:12 +0100 Subject: [PATCH 04/21] fix variable name --- src/main/java/org/apache/xmlbeans/XmlOptions.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index 71b7ba7cc..78ec2dfe2 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -107,7 +107,7 @@ public enum XmlOptionsKeys { SAVE_CDATA_LENGTH_THRESHOLD, SAVE_CDATA_ENTITY_COUNT_THRESHOLD, SAVE_SAX_NO_NSDECLS_IN_ATTRIBUTES, - SAVE_EXTRA_ENAMESPACES, + SAVE_EXTRA_NAMESPACES, LOAD_REPLACE_DOCUMENT_ELEMENT, LOAD_STRIP_WHITESPACE, LOAD_STRIP_COMMENTS, @@ -458,12 +458,12 @@ public Map getSaveSuggestedPrefixes() { * @see XmlTokenSource#xmlText(XmlOptions) */ public XmlOptions setSaveExtraNamespaces(Map extraNamespaces) { - return set(XmlOptionsKeys.SAVE_EXTRA_ENAMESPACES, extraNamespaces); + return set(XmlOptionsKeys.SAVE_EXTRA_NAMESPACES, extraNamespaces); } @SuppressWarnings("unchecked") public Map getSaveExtraNamespaces() { - return (Map) get(XmlOptionsKeys.SAVE_EXTRA_ENAMESPACES); + return (Map) get(XmlOptionsKeys.SAVE_EXTRA_NAMESPACES); } /** From c8ec15ee935b0cbc565053d922568fbe8e70bd13 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 16:15:36 +0100 Subject: [PATCH 05/21] Update SchemaTypeSystemCompiler.java --- .../xmlbeans/impl/schema/SchemaTypeSystemCompiler.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java index bd0281bf7..d8effd2fa 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java @@ -373,14 +373,14 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt 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, (options == null) ? null : options.getCompileSourceCodeEncoding())) { + try (Writer out = filer.createSourceFile(indexClassName, options == null ? null : options.getCompileSourceCodeEncoding())) { Repackager repackager = (filer instanceof FilerImpl) ? ((FilerImpl) filer).getRepackager() : null; printer.printHolder(out, system, options, repackager); } catch (IOException e) { @@ -398,7 +398,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String fjn = type.getFullJavaName(); - try (Writer writer = filer.createSourceFile(fjn, (options == null) ? null : options.getCompileSourceCodeEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, options == null ? null : options.getCompileSourceCodeEncoding())) { // Generate interface class printer.printType(writer, type, options); } catch (IOException e) { @@ -408,7 +408,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt fjn = type.getFullJavaImplName(); - try (Writer writer = filer.createSourceFile(fjn, (options == null) ? null : options.getCompileSourceCodeEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, options == null ? null : options.getCompileSourceCodeEncoding())) { // Generate Implementation class printer.printTypeImpl(writer, type, options); } catch (IOException e) { From 02511f128e838bac13733923dfc585fa3a2b30b3 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 16:17:25 +0100 Subject: [PATCH 06/21] Update SchemaCompiler.java --- .../java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index b389ebe1b..171843637 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -187,7 +187,7 @@ public static void main(String[] args) { boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); String sourceCodeEncoding = cl.getOpt("sourcecodeencoding"); - boolean useShortName = (cl.getOpt("useshortname") != null); + boolean useJavaShortName = (cl.getOpt("useshortname") != null); String allowmdef = cl.getOpt("allowmdef"); Set mdefNamespaces = (allowmdef == null ? Collections.emptySet() : @@ -336,7 +336,7 @@ public static void main(String[] args) { params.setNoExt(noExt); params.setDebug(debug); params.setSourceCodeEncoding(sourceCodeEncoding); - params.setUseShortName(useShortName); + params.setUseShortName(useJavaShortName); params.setErrorListener(err); params.setRepackage(repackage); params.setExtensions(extensions); From 292a37a2c43b64f6cbbcd7bde70fefb21f54fcbf Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 18:01:14 +0100 Subject: [PATCH 07/21] use existing char encoding --- src/main/java/org/apache/xmlbeans/XmlOptions.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index 78ec2dfe2..378805d63 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -158,7 +158,6 @@ public enum XmlOptionsKeys { XPATH_USE_SAXON, XPATH_USE_XMLBEANS, ATTRIBUTE_VALIDATION_COMPAT_MODE, - SOURCE_CODE_ENCODING, USE_SHORT_JAVA_NAME } @@ -1088,17 +1087,6 @@ public boolean isCompileDownloadUrls() { return hasOption(XmlOptionsKeys.COMPILE_DOWNLOAD_URLS); } - /** - * An optional encoding to use when compiling generated source code (can be null). - */ - public XmlOptions setCompileSourceCodeEncoding(String enc) { - return set(XmlOptionsKeys.SOURCE_CODE_ENCODING, enc); - } - - public String getCompileSourceCodeEncoding() { - return (String) get(XmlOptionsKeys.SOURCE_CODE_ENCODING); - } - /** * If this option is set, then the schema compiler will use the java_short_name to generate file name * From 32b312f87ffe4387a438d988866ea0ecca553fa7 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 18:03:10 +0100 Subject: [PATCH 08/21] use char encoding --- .../java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 171843637..c0e3afdf2 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -526,7 +526,7 @@ private static SchemaTypeSystem loadTypeSystem(String name, File[] xsdFiles, Fil opts.setCompileNoAnnotations(); } if (sourceCodeEncoding != null ) { - opts.setCompileSourceCodeEncoding(sourceCodeEncoding); + opts.setCharacterEncoding(sourceCodeEncoding); } if (useShortName) { opts.setCompileUseShortJavaName(); @@ -705,7 +705,7 @@ public static boolean compile(Parameters params) { options.setCompilePartialMethod(partialMethods); options.setCompileNoAnnotations(noAnn); options.setCompileAnnotationAsJavadoc(copyAnn); - options.setCompileSourceCodeEncoding(sourceCodeEncoding); + options.setCharacterEncoding(sourceCodeEncoding); options.setCompileUseShortJavaName(useShortName); // save .xsb files From 99368970cfd005385eb543aa24b329b1b9d76e78 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 18:03:37 +0100 Subject: [PATCH 09/21] remove unused 'extra namespaces' config --- .../java/org/apache/xmlbeans/XmlOptions.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index 378805d63..2e34c4048 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -448,23 +448,6 @@ public Map getSaveSuggestedPrefixes() { return (Map) get(XmlOptionsKeys.SAVE_SUGGESTED_PREFIXES); } - /** - * A map of hints to pass to the saver for which prefixes to use - * for which namespace URI. - * - * @param extraNamespaces a map from URIs to prefixes - * @see XmlTokenSource#save(java.io.File, XmlOptions) - * @see XmlTokenSource#xmlText(XmlOptions) - */ - public XmlOptions setSaveExtraNamespaces(Map extraNamespaces) { - return set(XmlOptionsKeys.SAVE_EXTRA_NAMESPACES, extraNamespaces); - } - - @SuppressWarnings("unchecked") - public Map getSaveExtraNamespaces() { - return (Map) get(XmlOptionsKeys.SAVE_EXTRA_NAMESPACES); - } - /** * This option causes the saver to filter a Processing Instruction * with the given target From 922ccc45a5bb6bb5bcab075bffb393aae2300a28 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 18:34:22 +0100 Subject: [PATCH 10/21] fix compile issue --- .../xmlbeans/impl/schema/SchemaTypeSystemCompiler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java index d8effd2fa..1566e1049 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java @@ -380,7 +380,7 @@ public static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String indexClassName = SchemaTypeCodePrinter.indexClassForSystem(system); - try (Writer out = filer.createSourceFile(indexClassName, options == null ? null : options.getCompileSourceCodeEncoding())) { + 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 static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt String fjn = type.getFullJavaName(); - try (Writer writer = filer.createSourceFile(fjn, options == null ? null : options.getCompileSourceCodeEncoding())) { + 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 static boolean generateTypes(SchemaTypeSystem system, Filer filer, XmlOpt fjn = type.getFullJavaImplName(); - try (Writer writer = filer.createSourceFile(fjn, options == null ? null : options.getCompileSourceCodeEncoding())) { + try (Writer writer = filer.createSourceFile(fjn, options == null ? null : options.getCharacterEncoding())) { // Generate Implementation class printer.printTypeImpl(writer, type, options); } catch (IOException e) { From 8f1cbfdf91ec62de84c50481100936249e37e931 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 18 Jun 2024 18:39:36 +0100 Subject: [PATCH 11/21] rename params --- src/main/java/org/apache/xmlbeans/XmlOptions.java | 7 +++---- .../java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index 2e34c4048..bbc53fc21 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -107,7 +107,6 @@ public enum XmlOptionsKeys { SAVE_CDATA_LENGTH_THRESHOLD, SAVE_CDATA_ENTITY_COUNT_THRESHOLD, SAVE_SAX_NO_NSDECLS_IN_ATTRIBUTES, - SAVE_EXTRA_NAMESPACES, LOAD_REPLACE_DOCUMENT_ELEMENT, LOAD_STRIP_WHITESPACE, LOAD_STRIP_COMMENTS, @@ -158,7 +157,7 @@ public enum XmlOptionsKeys { XPATH_USE_SAXON, XPATH_USE_XMLBEANS, ATTRIBUTE_VALIDATION_COMPAT_MODE, - USE_SHORT_JAVA_NAME + USE_JAVA_SHORT_NAME } @@ -1079,11 +1078,11 @@ public XmlOptions setCompileUseShortJavaName() { } public XmlOptions setCompileUseShortJavaName(boolean b) { - return set(XmlOptionsKeys.USE_SHORT_JAVA_NAME, b); + return set(XmlOptionsKeys.USE_JAVA_SHORT_NAME, b); } public boolean isCompileUseShortJavaName() { - return hasOption(XmlOptionsKeys.USE_SHORT_JAVA_NAME); + return hasOption(XmlOptionsKeys.USE_JAVA_SHORT_NAME); } /** * If this option is set, then the schema compiler will permit and diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index c0e3afdf2..8cb22195b 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -187,7 +187,7 @@ public static void main(String[] args) { boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); String sourceCodeEncoding = cl.getOpt("sourcecodeencoding"); - boolean useJavaShortName = (cl.getOpt("useshortname") != null); + boolean useJavaShortName = (cl.getOpt("usejavashortname") != null); String allowmdef = cl.getOpt("allowmdef"); Set mdefNamespaces = (allowmdef == null ? Collections.emptySet() : From d3a661b3d86baab07902f1f20049175ffa365b96 Mon Sep 17 00:00:00 2001 From: s_zhangziang Date: Thu, 20 Jun 2024 09:44:02 +0800 Subject: [PATCH 12/21] Supplementary changes to the command line --- .../java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 8cb22195b..8b488a89b 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -67,6 +67,8 @@ public static void printUsage() { 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 - Generate Java source code and jar package using utf-8"); + System.out.println(" -usejavashortname - Generate file name using JavaShortName"); /* 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"); @@ -98,6 +100,8 @@ public static void main(String[] args) { flags.add("noext"); flags.add("srconly"); flags.add("debug"); + flags.add("sourcecodeencoding"); + flags.add("usejavashortname"); Set opts = new HashSet<>(); opts.add("out"); From 5069ca498574512bf5ea45a2c2181d611cbbd9ba Mon Sep 17 00:00:00 2001 From: s_zhangziang Date: Thu, 20 Jun 2024 09:44:02 +0800 Subject: [PATCH 13/21] Supplementary changes to the command line --- src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 8b488a89b..3089f1ca6 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -67,7 +67,7 @@ public static void printUsage() { 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 - Generate Java source code and jar package using utf-8"); + System.out.println(" -sourcecodeencoding [encodingName] - Generate Java source code and jar package by the encoding specified by encodingName"); System.out.println(" -usejavashortname - Generate file name using JavaShortName"); /* Undocumented feature - pass in one schema compiler extension and related parameters System.out.println(" -extension - registers a schema compiler extension"); From 22c57668d16a8e9f6acf43bd9683146813aec184 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 20 Jun 2024 10:37:02 +0100 Subject: [PATCH 14/21] Update SchemaCompiler.java --- .../java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 3089f1ca6..931606e0f 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -67,8 +67,8 @@ public static void printUsage() { 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 and jar package by the encoding specified by encodingName"); - System.out.println(" -usejavashortname - Generate file name using JavaShortName"); + System.out.println(" -sourcecodeencoding [encodingName] - Generate Java source code with the specified encoding (ISO-8859-1 is the legacy default)"); + System.out.println(" -usejavashortname - Generate file name using Java Short Name"); /* 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"); From 02496669c0e98e3c1f5013ab90995ae30334d804 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 20 Jun 2024 11:23:27 +0100 Subject: [PATCH 15/21] Update FilerImpl.java --- .../apache/xmlbeans/impl/util/FilerImpl.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java index bf23b8471..02ee43551 100755 --- a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java @@ -40,15 +40,15 @@ public class FilerImpl implements Filer { private final List sourceFiles; private final boolean incrSrcGen; private Set seenTypes; - private static final Charset CHARSET; + private static final Charset DEFAULT_CHARSET; static { Charset temp = null; try { - temp = Charset.forName(System.getProperty("file.encoding")); + temp = getCharset(System.getProperty("file.encoding")); } catch (Exception ignored) { } - CHARSET = temp; + DEFAULT_CHARSET = temp; } public FilerImpl(File classdir, File srcdir, Repackager repackager, boolean verbose, boolean incrSrcGen) { @@ -129,18 +129,26 @@ public Repackager getRepackager() { } private static Writer writerForFile(File f, String sourceCodeEncoding) throws IOException { - if (sourceCodeEncoding != null) { - return Files.newBufferedWriter(f.toPath(), Charset.forName(sourceCodeEncoding)); - } else if (CHARSET == null) { + if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) { + return Files.newBufferedWriter(f.toPath(), getCharset(sourceCodeEncoding)); + } else if (DEFAULT_CHARSET == null) { return Files.newBufferedWriter(f.toPath(), StandardCharsets.ISO_8859_1); } 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; From e2c131a3808d804ee19e40124e87c6fda98bec76 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 20 Jun 2024 11:38:05 +0100 Subject: [PATCH 16/21] fix issue with sourcecodeencoding --- .../org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 2 +- .../java/org/apache/xmlbeans/impl/util/FilerImpl.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 931606e0f..50e72ff60 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -100,7 +100,6 @@ public static void main(String[] args) { flags.add("noext"); flags.add("srconly"); flags.add("debug"); - flags.add("sourcecodeencoding"); flags.add("usejavashortname"); Set opts = new HashSet<>(); @@ -121,6 +120,7 @@ public static void main(String[] args) { opts.add("catalog"); opts.add("partialMethods"); opts.add("copyann"); + opts.add("sourcecodeencoding"); CommandLine cl = new CommandLine(args, flags, opts); diff --git a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java index 02ee43551..9463c3503 100755 --- a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java @@ -40,7 +40,7 @@ public class FilerImpl implements Filer { private final List sourceFiles; private final boolean incrSrcGen; private Set seenTypes; - private static final Charset DEFAULT_CHARSET; + private static final Charset CHARSET; static { Charset temp = null; @@ -48,7 +48,7 @@ public class FilerImpl implements Filer { temp = getCharset(System.getProperty("file.encoding")); } catch (Exception ignored) { } - DEFAULT_CHARSET = temp; + CHARSET = temp; } public FilerImpl(File classdir, File srcdir, Repackager repackager, boolean verbose, boolean incrSrcGen) { @@ -131,12 +131,12 @@ public Repackager getRepackager() { private static Writer writerForFile(File f, String sourceCodeEncoding) throws IOException { if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) { return Files.newBufferedWriter(f.toPath(), getCharset(sourceCodeEncoding)); - } else if (DEFAULT_CHARSET == null) { + } else if (CHARSET == null) { return Files.newBufferedWriter(f.toPath(), StandardCharsets.ISO_8859_1); } OutputStream fileStream = Files.newOutputStream(f.toPath()); - CharsetEncoder ce = DEFAULT_CHARSET.newEncoder(); + CharsetEncoder ce = CHARSET.newEncoder(); ce.onUnmappableCharacter(CodingErrorAction.REPORT); return new OutputStreamWriter(fileStream, ce); } From 83ac5488e4a64fcd10a3fb2b95dd0d3f3859c248 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 20 Jun 2024 12:34:24 +0100 Subject: [PATCH 17/21] make use of Charset.defaultCharset() when no encoding specified --- .../impl/schema/SchemaTypeCodePrinter.java | 2 +- .../apache/xmlbeans/impl/tool/CodeGenUtil.java | 8 +++----- .../org/apache/xmlbeans/impl/util/FilerImpl.java | 15 ++------------- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java index 43e63fcc7..6bb973116 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java @@ -83,7 +83,7 @@ void emit(String s) throws IOException { } 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; diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java index 2c65d24fe..a7f24fff5 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/CodeGenUtil.java @@ -199,12 +199,10 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c addAllJavaFiles(srcFiles, args); - final Charset charset = sourceCodeEncoding == null || sourceCodeEncoding.isEmpty() ? - StandardCharsets.ISO_8859_1 : Charset.forName(sourceCodeEncoding); File clFile = null; try { clFile = Files.createTempFile(IOUtil.getTempDir(), "javac", ".tmp").toFile(); - try (Writer fw = Files.newBufferedWriter(clFile.toPath(), charset)) { + try (Writer fw = Files.newBufferedWriter(clFile.toPath(), Charset.defaultCharset())) { Iterator i = args.iterator(); for (i.next(); i.hasNext(); ) { String arg = i.next(); @@ -272,7 +270,7 @@ public static boolean externalCompile(List srcFiles, File outdir, File[] c e.printStackTrace(System.err); return false; } finally { - if (clFile != null) { + if (!debug && clFile != null) { clFile.delete(); } } @@ -348,7 +346,7 @@ private static File findJavaTool(String tool) { * 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")) ); diff --git a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java index 9463c3503..836b5b39a 100755 --- a/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/FilerImpl.java @@ -40,16 +40,7 @@ public class FilerImpl implements Filer { private final List sourceFiles; private final boolean incrSrcGen; private Set seenTypes; - private static final Charset CHARSET; - - static { - Charset temp = null; - try { - temp = getCharset(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; @@ -131,12 +122,10 @@ public Repackager getRepackager() { private static Writer writerForFile(File f, String sourceCodeEncoding) throws IOException { if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) { return Files.newBufferedWriter(f.toPath(), getCharset(sourceCodeEncoding)); - } else if (CHARSET == null) { - return Files.newBufferedWriter(f.toPath(), StandardCharsets.ISO_8859_1); } OutputStream fileStream = Files.newOutputStream(f.toPath()); - CharsetEncoder ce = CHARSET.newEncoder(); + CharsetEncoder ce = DEFAULT_CHARSET.newEncoder(); ce.onUnmappableCharacter(CodingErrorAction.REPORT); return new OutputStreamWriter(fileStream, ce); } From 11b8269f6c7233cebc58b116a9ced81ffd01f8d1 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 20 Jun 2024 12:46:27 +0100 Subject: [PATCH 18/21] go back to 'Short Java Name' --- .../apache/xmlbeans/impl/schema/SchemaTypePool.java | 4 ++-- .../xmlbeans/impl/schema/SchemaTypeSystemImpl.java | 10 +++++----- .../org/apache/xmlbeans/impl/schema/StscState.java | 6 +++--- .../org/apache/xmlbeans/impl/tool/SchemaCompiler.java | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java index 1bc84b042..2171a57f2 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java @@ -89,7 +89,7 @@ String handleForElement(SchemaGlobalElement element) { } String handle = _componentsToHandles.get(element); if (handle == null) { - if(typeSystem.isUseJavaShortName()) { + if(typeSystem.isUseShortJavaName()) { SchemaType type = element.getType(); String javaName = type.getShortJavaName(); if (javaName != null && !javaName.isEmpty()) { @@ -189,7 +189,7 @@ String handleForType(SchemaType type) { if (name == null) { baseName = "Anon" + uniq + "Type"; } else { - if(typeSystem.isUseJavaShortName()) { + if(typeSystem.isUseShortJavaName()) { String javaName = type.getShortJavaName(); if (javaName == null || javaName.isEmpty()) javaName = name.getLocalPart(); diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java index 0699d9f21..88b203723 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java @@ -166,7 +166,7 @@ public class SchemaTypeSystemImpl extends SchemaTypeLoaderBase implements Schema // the additional config option private String _sourceCodeEncoding ; - private boolean _useJavaShortName; + private boolean _useShortJavaName; static String nameToPathString(String nameForSystem) { nameForSystem = nameForSystem.replace('.', '/'); @@ -319,7 +319,7 @@ void savePointers() { void savePointersForComponents(SchemaComponent[] components, String dir) { for (SchemaComponent component : components) { - if(_useJavaShortName) { + if(_useShortJavaName) { String javaName = _localHandles.handleForComponent(component); if (javaName != null && !javaName.isEmpty()) { @@ -440,8 +440,8 @@ String getSourceCodeEncoding() { return _sourceCodeEncoding ; } - boolean isUseJavaShortName(){ - return _useJavaShortName; + boolean isUseShortJavaName(){ + return _useShortJavaName; } @SuppressWarnings("unchecked") @@ -648,7 +648,7 @@ public void loadFromStscState(StscState state) { _annotations = state.annotations(); _namespaces = new HashSet<>(Arrays.asList(state.getNamespaces())); _containers = state.getContainerMap(); - _useJavaShortName = state.useShortName(); + _useShortJavaName = state.useShortName(); _sourceCodeEncoding = state.sourceCodeEncoding(); fixupContainers(); // Checks that data in the containers matches the lookup maps diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java index 7780c74db..fe800b831 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java @@ -103,7 +103,7 @@ public class StscState { private boolean _noPvr; private boolean _noAnn; private boolean _mdefAll; - private boolean _useJavaShortName; + private boolean _useShortJavaName; private String _sourceCodeEncoding ; private final Set _mdefNamespaces = buildDefaultMdefNamespaces(); private EntityResolver _entityResolver; @@ -465,7 +465,7 @@ public void setOptions(XmlOptions options) { if (_sourceCodeEncoding == null || _sourceCodeEncoding.isEmpty()) { _sourceCodeEncoding = SystemProperties.getProperty("xmlbean.sourcecodeencoding"); } - _useJavaShortName = options.isCompileUseShortJavaName() || + _useShortJavaName = options.isCompileUseShortJavaName() || "true".equals(SystemProperties.getProperty("xmlbean.useshortjavaname", "false")); _entityResolver = options.getEntityResolver(); @@ -544,7 +544,7 @@ public String sourceCodeEncoding() { */ // EXPERIMENTAL public boolean useShortName() { - return _useJavaShortName; + return _useShortJavaName; } /** diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 50e72ff60..014809455 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -68,7 +68,7 @@ public static void printUsage() { 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)"); - System.out.println(" -usejavashortname - Generate file name using Java Short Name"); + System.out.println(" -useshortjavaname - Generate file name using Short Java Name"); /* 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"); @@ -100,7 +100,7 @@ public static void main(String[] args) { flags.add("noext"); flags.add("srconly"); flags.add("debug"); - flags.add("usejavashortname"); + flags.add("useshortjavaname"); Set opts = new HashSet<>(); opts.add("out"); @@ -191,7 +191,7 @@ public static void main(String[] args) { boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); String sourceCodeEncoding = cl.getOpt("sourcecodeencoding"); - boolean useJavaShortName = (cl.getOpt("usejavashortname") != null); + boolean useShortJavaName = (cl.getOpt("useshortjavaname") != null); String allowmdef = cl.getOpt("allowmdef"); Set mdefNamespaces = (allowmdef == null ? Collections.emptySet() : @@ -340,7 +340,7 @@ public static void main(String[] args) { params.setNoExt(noExt); params.setDebug(debug); params.setSourceCodeEncoding(sourceCodeEncoding); - params.setUseShortName(useJavaShortName); + params.setUseShortName(useShortJavaName); params.setErrorListener(err); params.setRepackage(repackage); params.setExtensions(extensions); From 7251512d47d503660ad8a31e59f864679013798c Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 21 Jun 2024 18:09:43 +0100 Subject: [PATCH 19/21] add MavenPlugin support --- .../xmlbeans/impl/tool/MavenPlugin.java | 20 +++++++++++++++++++ .../apache/xmlbeans/impl/tool/Parameters.java | 10 +++++----- .../xmlbeans/impl/tool/SchemaCompiler.java | 4 ++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java b/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java index 952afb383..0dec82056 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java @@ -184,6 +184,22 @@ public class MavenPlugin extends AbstractMojo { @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; + + /** + * Used for File Names. + * + * @since 5.2.2 + */ + @Parameter( defaultValue = "false" ) + private boolean useShortJavaName; + @Parameter private List extensions; @@ -301,6 +317,10 @@ public void execute() throws MojoExecutionException, MojoFailureException { params.setOutputJar(outputJar); params.setDebug(debug); params.setExtensions(extensions); + if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) { + params.setSourceCodeEncoding(sourceCodeEncoding); + } + params.setUseShortJavaName(useShortJavaName); boolean result = SchemaCompiler.compile(params); diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java index 8ee32c462..a37a7ae24 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java @@ -54,7 +54,7 @@ public class Parameters { private boolean noExt; private boolean debug; private boolean copyAnn; - private boolean useShortName; + private boolean useShortJavaName; private String sourceCodeEncoding; private boolean incrementalSrcGen; private String repackage; @@ -205,8 +205,8 @@ public boolean isNoAnn() { return noAnn; } - public boolean isUseShortName() { - return useShortName; + public boolean isUseShortJavaName() { + return useShortJavaName; } public String getSourceCodeEncoding() { @@ -249,8 +249,8 @@ public void setDebug(boolean debug) { this.debug = debug; } - public void setUseShortName(boolean useShortName) { - this.useShortName = useShortName; + public void setUseShortJavaName(boolean useShortJavaName) { + this.useShortJavaName = useShortJavaName; } public void setSourceCodeEncoding(String sourceCodeEncoding) { diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index 014809455..c2b442c9b 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -340,7 +340,7 @@ public static void main(String[] args) { params.setNoExt(noExt); params.setDebug(debug); params.setSourceCodeEncoding(sourceCodeEncoding); - params.setUseShortName(useShortJavaName); + params.setUseShortJavaName(useShortJavaName); params.setErrorListener(err); params.setRepackage(repackage); params.setExtensions(extensions); @@ -629,7 +629,7 @@ public static boolean compile(Parameters params) { boolean incrSrcGen = params.isIncrementalSrcGen(); boolean copyAnn = params.isCopyAnn(); String sourceCodeEncoding = params.getSourceCodeEncoding(); - boolean useShortName = params.isUseShortName(); + boolean useShortName = params.isUseShortJavaName(); Collection outerErrorListener = params.getErrorListener(); Set partialMethods = params.getPartialMethods(); From 8cbde4fac1ab5e57c833221a7076a1ace9c44261 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 24 Jun 2024 11:04:21 +0100 Subject: [PATCH 20/21] remove UseShortJavaName code - should be in its own PR --- .../java/org/apache/xmlbeans/XmlOptions.java | 15 ----------- .../xmlbeans/impl/schema/SchemaTypePool.java | 22 ++-------------- .../impl/schema/SchemaTypeSystemImpl.java | 26 +------------------ .../xmlbeans/impl/schema/StscState.java | 11 -------- .../xmlbeans/impl/tool/MavenPlugin.java | 9 ------- .../apache/xmlbeans/impl/tool/Parameters.java | 9 ------- .../xmlbeans/impl/tool/SchemaCompiler.java | 13 ++-------- .../checkin/XmlBeansCompCheckinTests.java | 19 -------------- 8 files changed, 5 insertions(+), 119 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index bbc53fc21..e58f1e2cc 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -1069,21 +1069,6 @@ public boolean isCompileDownloadUrls() { return hasOption(XmlOptionsKeys.COMPILE_DOWNLOAD_URLS); } - /** - * If this option is set, then the schema compiler will use the java_short_name to generate file name - * - */ - public XmlOptions setCompileUseShortJavaName() { - return setCompileUseShortJavaName(true); - } - - public XmlOptions setCompileUseShortJavaName(boolean b) { - return set(XmlOptionsKeys.USE_JAVA_SHORT_NAME, b); - } - - public boolean isCompileUseShortJavaName() { - return hasOption(XmlOptionsKeys.USE_JAVA_SHORT_NAME); - } /** * If this option is set, then the schema compiler will permit and * ignore multiple definitions of the same component (element, attribute, diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java index 2171a57f2..60e6d333e 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypePool.java @@ -89,17 +89,7 @@ String handleForElement(SchemaGlobalElement element) { } String handle = _componentsToHandles.get(element); if (handle == null) { - if(typeSystem.isUseShortJavaName()) { - SchemaType type = element.getType(); - String javaName = type.getShortJavaName(); - if (javaName != null && !javaName.isEmpty()) { - handle = addUniqueHandle(element, NameUtil.upperCamelCase(javaName) + "Element"); - } else { - handle = addUniqueHandle(element, NameUtil.upperCamelCase(element.getName().getLocalPart()) + "Element"); - } - } else { - handle = addUniqueHandle(element, NameUtil.upperCamelCase(element.getName().getLocalPart()) + "Element"); - } + handle = addUniqueHandle(element, NameUtil.upperCamelCase(element.getName().getLocalPart()) + "Element"); } return handle; } @@ -189,15 +179,7 @@ String handleForType(SchemaType type) { if (name == null) { baseName = "Anon" + uniq + "Type"; } else { - if(typeSystem.isUseShortJavaName()) { - String javaName = type.getShortJavaName(); - if (javaName == null || javaName.isEmpty()) - javaName = name.getLocalPart(); - baseName = NameUtil.upperCamelCase(javaName) + uniq + suffix + "Type"; - } - else { - baseName = NameUtil.upperCamelCase(name.getLocalPart()) + uniq + suffix + "Type"; - } + baseName = NameUtil.upperCamelCase(name.getLocalPart()) + uniq + suffix + "Type"; } handle = addUniqueHandle(type, baseName); diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java index 88b203723..ed6b7919f 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java @@ -166,7 +166,6 @@ public class SchemaTypeSystemImpl extends SchemaTypeLoaderBase implements Schema // the additional config option private String _sourceCodeEncoding ; - private boolean _useShortJavaName; static String nameToPathString(String nameForSystem) { nameForSystem = nameForSystem.replace('.', '/'); @@ -319,25 +318,7 @@ void savePointers() { void savePointersForComponents(SchemaComponent[] components, String dir) { for (SchemaComponent component : components) { - if(_useShortJavaName) { - String javaName = _localHandles.handleForComponent(component); - if (javaName != null && !javaName.isEmpty()) - { - QName nameTemp = component.getName(); - String resultName; - if (nameTemp.getNamespaceURI() == null || nameTemp.getNamespaceURI().length() == 0) { - resultName = "_nons/" + QNameHelper.hexsafe(javaName); - } else { - resultName = QNameHelper.hexsafe(nameTemp.getNamespaceURI()) + "/" - + QNameHelper.hexsafe(javaName); - } - savePointerFile(dir + resultName, _name); - } else { - savePointerFile(dir + QNameHelper.hexsafedir(component.getName()), _name); - } - } else { - savePointerFile(dir + QNameHelper.hexsafedir(component.getName()), _name); - } + savePointerFile(dir + QNameHelper.hexsafedir(component.getName()), _name); } } @@ -440,10 +421,6 @@ String getSourceCodeEncoding() { return _sourceCodeEncoding ; } - boolean isUseShortJavaName(){ - return _useShortJavaName; - } - @SuppressWarnings("unchecked") private void buildContainersHelper(Map elements, BiConsumer adder) { elements.forEach((k, v) -> adder.accept(getContainerNonNull(k.getNamespaceURI()), (T) v)); @@ -648,7 +625,6 @@ public void loadFromStscState(StscState state) { _annotations = state.annotations(); _namespaces = new HashSet<>(Arrays.asList(state.getNamespaces())); _containers = state.getContainerMap(); - _useShortJavaName = state.useShortName(); _sourceCodeEncoding = state.sourceCodeEncoding(); fixupContainers(); // Checks that data in the containers matches the lookup maps diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java index fe800b831..eb9ad1003 100644 --- a/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java +++ b/src/main/java/org/apache/xmlbeans/impl/schema/StscState.java @@ -103,7 +103,6 @@ public class StscState { private boolean _noPvr; private boolean _noAnn; private boolean _mdefAll; - private boolean _useShortJavaName; private String _sourceCodeEncoding ; private final Set _mdefNamespaces = buildDefaultMdefNamespaces(); private EntityResolver _entityResolver; @@ -465,8 +464,6 @@ public void setOptions(XmlOptions options) { if (_sourceCodeEncoding == null || _sourceCodeEncoding.isEmpty()) { _sourceCodeEncoding = SystemProperties.getProperty("xmlbean.sourcecodeencoding"); } - _useShortJavaName = options.isCompileUseShortJavaName() || - "true".equals(SystemProperties.getProperty("xmlbean.useshortjavaname", "false")); _entityResolver = options.getEntityResolver(); if (_entityResolver == null) { @@ -539,14 +536,6 @@ public String sourceCodeEncoding() { return _sourceCodeEncoding ; } - /** - * True if use the java_short_name to generate file name - */ - // EXPERIMENTAL - public boolean useShortName() { - return _useShortJavaName; - } - /** * Get count of recovered errors. Not for public. */ diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java b/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java index 0dec82056..8a7e2f9ae 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/MavenPlugin.java @@ -192,14 +192,6 @@ public class MavenPlugin extends AbstractMojo { @Parameter private String sourceCodeEncoding; - /** - * Used for File Names. - * - * @since 5.2.2 - */ - @Parameter( defaultValue = "false" ) - private boolean useShortJavaName; - @Parameter private List extensions; @@ -320,7 +312,6 @@ public void execute() throws MojoExecutionException, MojoFailureException { if (sourceCodeEncoding != null && !sourceCodeEncoding.isEmpty()) { params.setSourceCodeEncoding(sourceCodeEncoding); } - params.setUseShortJavaName(useShortJavaName); boolean result = SchemaCompiler.compile(params); diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java index a37a7ae24..dd6340fb2 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/Parameters.java @@ -54,7 +54,6 @@ public class Parameters { private boolean noExt; private boolean debug; private boolean copyAnn; - private boolean useShortJavaName; private String sourceCodeEncoding; private boolean incrementalSrcGen; private String repackage; @@ -205,10 +204,6 @@ public boolean isNoAnn() { return noAnn; } - public boolean isUseShortJavaName() { - return useShortJavaName; - } - public String getSourceCodeEncoding() { return sourceCodeEncoding; } @@ -249,10 +244,6 @@ public void setDebug(boolean debug) { this.debug = debug; } - public void setUseShortJavaName(boolean useShortJavaName) { - this.useShortJavaName = useShortJavaName; - } - public void setSourceCodeEncoding(String sourceCodeEncoding) { this.sourceCodeEncoding = sourceCodeEncoding; } diff --git a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java index c2b442c9b..c5340bb6f 100644 --- a/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java +++ b/src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java @@ -68,7 +68,6 @@ public static void printUsage() { 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)"); - System.out.println(" -useshortjavaname - Generate file name using Short Java Name"); /* 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"); @@ -100,7 +99,6 @@ public static void main(String[] args) { flags.add("noext"); flags.add("srconly"); flags.add("debug"); - flags.add("useshortjavaname"); Set opts = new HashSet<>(); opts.add("out"); @@ -191,7 +189,6 @@ public static void main(String[] args) { boolean debug = (cl.getOpt("debug") != null); boolean copyAnn = (cl.getOpt("copyann") != null); String sourceCodeEncoding = cl.getOpt("sourcecodeencoding"); - boolean useShortJavaName = (cl.getOpt("useshortjavaname") != null); String allowmdef = cl.getOpt("allowmdef"); Set mdefNamespaces = (allowmdef == null ? Collections.emptySet() : @@ -340,7 +337,6 @@ public static void main(String[] args) { params.setNoExt(noExt); params.setDebug(debug); params.setSourceCodeEncoding(sourceCodeEncoding); - params.setUseShortJavaName(useShortJavaName); params.setErrorListener(err); params.setRepackage(repackage); params.setExtensions(extensions); @@ -364,7 +360,7 @@ public static void main(String[] args) { 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, String sourceCodeEncoding, boolean useShortName, + boolean download, boolean noUpa, boolean noPvr, boolean noAnn, boolean noVDoc, boolean noExt, String sourceCodeEncoding, Set mdefNamespaces, File baseDir, Map sourcesToCopyMap, Collection outerErrorListener, File schemasDir, EntityResolver entResolver, File[] classpath) { XmlErrorWatcher errorListener = new XmlErrorWatcher(outerErrorListener); @@ -532,9 +528,6 @@ private static SchemaTypeSystem loadTypeSystem(String name, File[] xsdFiles, Fil if (sourceCodeEncoding != null ) { opts.setCharacterEncoding(sourceCodeEncoding); } - if (useShortName) { - opts.setCompileUseShortJavaName(); - } if (mdefNamespaces != null) { opts.setCompileMdefNamespaces(mdefNamespaces); } @@ -629,7 +622,6 @@ public static boolean compile(Parameters params) { boolean incrSrcGen = params.isIncrementalSrcGen(); boolean copyAnn = params.isCopyAnn(); String sourceCodeEncoding = params.getSourceCodeEncoding(); - boolean useShortName = params.isUseShortJavaName(); Collection outerErrorListener = params.getErrorListener(); Set partialMethods = params.getPartialMethods(); @@ -682,7 +674,7 @@ public static boolean compile(Parameters params) { // 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, sourceCodeEncoding, useShortName, mdefNamespaces, + javaFiles, cpResourceLoader, download, noUpa, noPvr, noAnn, noVDoc, noExt, sourceCodeEncoding, mdefNamespaces, baseDir, sourcesToCopyMap, errorListener, schemasDir, cmdLineEntRes, classpath); if (errorListener.hasError()) { result = false; @@ -710,7 +702,6 @@ public static boolean compile(Parameters params) { options.setCompileNoAnnotations(noAnn); options.setCompileAnnotationAsJavadoc(copyAnn); options.setCharacterEncoding(sourceCodeEncoding); - options.setCompileUseShortJavaName(useShortName); // save .xsb files system.save(filer); diff --git a/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java b/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java index 327877c76..1b443c06b 100644 --- a/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java +++ b/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java @@ -99,25 +99,6 @@ void test_Filer_compilation() throws Exception { MatcherAssert.assertThat(f.getSrcFileVec(), is(expSrcType)); } - @Test - void test_Filer_shortname_compilation() throws Exception { - XmlObject obj1 = XmlObject.Factory.parse(FOR_XSD); - XmlObject[] schemas = new XmlObject[]{obj1}; - - TestFiler f = new TestFiler(); - xm_opts.setCompileUseShortJavaName(); - XmlBeans.compileXmlBeans("apiCompile", null, schemas, null, XmlBeans.getBuiltinTypeSystem(), f, xm_opts); - - assertTrue(f.isCreateBinaryFile(), "Binary File method not invoked"); - assertTrue(f.isCreateSourceFile(), "Source File method not invoked"); - - assertNotNull(f.getBinFileVec()); - MatcherAssert.assertThat(f.getBinFileVec(), is(expBinShortnameType)); - - assertNotNull(f.getSrcFileVec()); - MatcherAssert.assertThat(f.getSrcFileVec(), is(expSrcType)); - } - /** * Verify Partial SOM cannot be saved to file system */ From 6058cfb8b7253844bc524db389a12934aae3e56c Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 24 Jun 2024 11:25:24 +0100 Subject: [PATCH 21/21] Update XmlOptions.java --- src/main/java/org/apache/xmlbeans/XmlOptions.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/apache/xmlbeans/XmlOptions.java b/src/main/java/org/apache/xmlbeans/XmlOptions.java index e58f1e2cc..3d055b867 100644 --- a/src/main/java/org/apache/xmlbeans/XmlOptions.java +++ b/src/main/java/org/apache/xmlbeans/XmlOptions.java @@ -156,8 +156,7 @@ public enum XmlOptionsKeys { LOAD_USE_LOCALE_CHAR_UTIL, XPATH_USE_SAXON, XPATH_USE_XMLBEANS, - ATTRIBUTE_VALIDATION_COMPAT_MODE, - USE_JAVA_SHORT_NAME + ATTRIBUTE_VALIDATION_COMPAT_MODE }