I try to generate java classes from xsd in a maven project using cxf-xjc-plugin.
It runs fine, but the generated source files get platform specific encoding (cp1251 on a windows pc) instead of utf-8. If any xsd types contain non-latin characters in schema annotations, then they become readable only in that specific encoding and the compiler later complains with [WARNING] /C:/.../SomeType.java:[17,4] unmappable character for encoding UTF-8
.
Please help me force utf-8 for sources generation.
The source encoding is set with
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
The build plugin is set up like that:
<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>
...
after having read through some older issues with xjc, particularly CXF-4369 and JAXB-499 I tried to force encoding with maven project property <file.encoding>utf-8</file.encoding>
and set a system property while running mvn -Dfile.encoding=utf-8 clean install
, but got nowhere.
MAVEN_OPTS=-Dfile.encoding=UTF-8
allowed generation of source files with proper UTF-8 encoding, but turned the output of unit tests to garbage (because windows console is not really utf-8). I'm sure there is a proper way to force the plugin respect source encoding without enforcing changing platform encoding for other components. – Heterolecithal