2014-06-27 74 views
1

我使用XmlBeans的2.6.0編譯包含的希臘字枚舉一些XSD文件:XmlBeans的生成與ANSI編碼的Java源文件

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

使用包含在xbean Ant任務進行編譯.jar的XmlBeans的ZIP二進制發行版。該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?

+0

你在調用XMLBeans作爲Maven插件還是通過命令行(scomp)? –

+0

@Gyro Gearless:作爲一個螞蟻任務 – yiannis

回答

2

我們有一個類似的問題,使用XMLBeans的maven任務編譯一些包含希臘「Omega」的模式。

問題是,XMLBeans(至少從版本2.5.0開始)總是使用Javas平臺默認編碼,只能通過調用帶有-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這顯然只是工作!

+0

謝謝,ant -Dfile.encoding = UTF-8 build-xmlbeans做了這個把戲 – yiannis