XmlBeans génère des fichiers source Java avec encodage ANSI


J'utilise XmlBeans 2.6.0 pour compiler des fichiers XSD qui contiennent une énumération de mots grecs:

<xs:simpleType name="t_series_report">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Γενική"/>
        <xs:enumeration value="Ειδική"/>
    </xs:restriction>
</xs:simpleType>

La compilation est effectuée à l'aide de la tâche Ant incluse dans le xbean.jar de la distribution binaire ZIP de XmlBeans. Les fichiers XSD sont enregistrés en utf-8 et cela est également correctement indiqué dans l'en-tête java files

<?xml version="1.0" encoding="UTF-8"?>

Le problème est que les fichiers Java générés par XmlBeans semblent être enregistrés dans le jeu de caractères ANSI et pendant la compilation, j'obtiens des erreurs comme:

  [xmlbean] C:\projects\myproject\workspace\prj\build\xmlbeans\test\src\com\company\project\schema\myschematype\cl\cle\ext\TMyType.java:61: illegal character: \8220
  [xmlbean]         static final int INT_ΓΕ�?ΙΚΉ = 1;
  [xmlbean]   

Existe-t-il un moyen de forcer XmlBeans à enregistrer les fichiers Java générés en UTF-8 au lieu de ANSI?

Author: yiannis, 2014-06-27

1 answers

Nous avons eu un problème similaire en compilant un schéma contenant un "Oméga" grec en utilisant la tâche maven de XMLBeans.

Le problème est que XMLBeans (au moins à partir de la version 2.5.0) utilise toujours l'encodage par défaut de la plate-forme Javas, qui ne peut être défini qu'en appelant la JVM avec un -Dfile.encoding=UTF-8.

Pour notre projet Maven, la solution était de NE PAS utiliser le plugin; à la place, nous avons invoqué XMLBeans en utilisant le plugin exec, donc nous avions le contrôle sur l'encodage. Voici un extrait du pom.xml

<plugin>
            <groupId>org.codehaus.mojo</groupId> 
            <artifactId>exec-maven-plugin</artifactId>
            <executions>

                <execution>
                    <id>exec-2.1.0</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>-Dfile.encoding=${project.build.sourceEncoding}</argument>
                            <argument>-classpath</argument>
                            <!-- automatically creates the classpath using all project dependencies,
                            also adding the project build directory -->
                            <classpath/>
                            <argument>org.apache.xmlbeans.impl.tool.SchemaCompiler</argument>
                            <argument>-src</argument>
                            <argument>${project.build.directory}/generated-sources</argument>
                            <argument>-srconly</argument>
                            <argument>-d</argument>
                            <argument>${project.build.directory}/classes</argument>
                            <argument>-javasource</argument>
                            <argument>1.6</argument>
                            <argument>${basedir}/src/main/2.1.0/schema/</argument>
                            <argument>src/main/2.1.0/config/FooBar_v2.1.0.xsdconfig</argument>
                        </arguments>
                    </configuration>
                </execution>

Je suppose cette approche serait également adaptable à Ant.

Une solution plus facile serait d'invoquer ant comme ceci:

ant -Dfile.encoding=UTF-8 build-or-whatever

Mais cela ne fonctionnera évidemment que si tous vos fichiers source sont en UTF-8!

 2
Author: Gyro Gearless, 2014-06-27 07:46:55