我正在使用 XmlBeans 2.6.0 编译一些包含希腊单词枚举的 XSD 文件:
<xs:simpleType name="t_series_report">
<xs:restriction base="xs:string">
<xs:enumeration value="Γενική"/>
<xs:enumeration value="Ειδική"/>
</xs:restriction>
</xs:simpleType>
使用 XmlBeans 的 ZIP 二进制发行版的 xbean.jar 中包含的 Ant 任务来执行编译。 XSD 文件保存为 utf-8,这在 java 头文件中也得到了正确的说明
<?xml version="1.0" encoding="UTF-8"?>
问题是 XmlBeans 生成的 Java 文件似乎以 ANSI 字符集保存,并且在编译期间我收到如下错误:
[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]
有没有办法强制 XmlBeans 将生成的 Java 文件保存为 UTF-8 而不是 ANSI?
最佳答案
我们在使用 XMLBeans 的 maven 任务编译一些包含希腊语“Omega”的模式时遇到了类似的问题。
问题是,XMLBeans(至少从版本 2.5.0 开始)始终使用 Java 平台默认编码,该编码只能通过使用 -Dfile.encoding=UTF-8
调用 JVM 来设置>.
对于我们的 Maven 项目,解决方案是不使用该插件;相反,我们使用 exec
插件调用 XMLBeans,因此我们可以控制编码。这是 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>
我认为这种方法也适用于 Ant
。
更简单的解决方案是像这样调用 ant:
ant -Dfile.encoding=UTF-8 build-or-whatever
但这显然只有在所有源文件都是 UTF-8 格式时才有效!
关于java - XmlBeans 生成具有 ANSI 编码的 Java 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24446194/