如何使cxf-xjc-plugin在utf-8中生成源代码

时间:2014-04-01 05:17:28

标签: java maven encoding cxf xjc

我尝试使用cxf-xjc-plugin在maven项目中从xsd生成java类。

它运行正常,但生成的源文件获得特定于平台的编码(在Windows PC上为cp1251)而不是utf-8。如果任何xsd类型在模式注释中包含非拉丁字符,那么它们仅在该特定编码中变得可读,并且编译器稍后会抱怨[WARNING] /C:/.../SomeType.java:[17,4] unmappable character for encoding UTF-8

请帮助我强制 utf-8 生成源代码。

源编码设置为

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

构建插件的设置如下:

<build>
    ...
    <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-xjc-plugin</artifactId>
        <version>2.7.0</version>
        <configuration>
            <extensions>
                <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.7.0</extension>
                <extension>net.java.dev.jaxb2-commons:jaxb-fluent-api:2.1.8</extension>
            </extensions>
        </configuration>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>xsdtojava</goal>
                </goals>
                <configuration>
                    <sourceRoot>${basedir}/target/generated-sources</sourceRoot>
                    <xsdOptions>
                        <xsdOption>
                            <extension>true</extension>
                            <xsd>${basedir}/src/main/resources/schemas/Policy.xsd</xsd>
                            <bindingFile>${basedir}/src/main/resources/schemas/Policy.xjb</bindingFile>
                            <extensionArgs>
                                <extensionArg>-Xdv</extensionArg>
                                <extensionArg>-Xfluent-api</extensionArg>
                            </extensionArgs>
                        </xsdOption>
                    </xsdOptions>
                </configuration>
            </execution>
        </executions>
    </plugin>
...

在阅读了xjc的一些旧问题后,特别是CXF-4369JAXB-499我试图强制使用maven项目属性<file.encoding>utf-8</file.encoding>进行编码,并在运行mvn -Dfile.encoding=utf-8 clean install时设置系统属性但是无处可去。

1 个答案:

答案 0 :(得分:9)

我可以通过在xsdOption元素中添加以下条目来使cxf-xjc-plugin以UTF-8生成源:

<extensionArgs>
    <arg>-encoding</arg>
    <arg>UTF-8</arg>
</extensionArgs>