You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17+Gradle环境下JAXB XJC UTF-8转Unicode反序列化问题

Gradle + JAXB 处理含UTF-8俄文Schema的反序列化问题

在Windows系统下构建基于Gradle的Java 17应用,需通过包含UTF-8俄文符号的XSD Schema将XML反序列化为Java类,过程中遇到以下问题:

  • 初始阶段无法生成带有原UTF-8俄文名称的类,添加编码参数后编译恢复正常
  • 运行时JAXB注解(如@XmlElement)中的Unicode转义字符导致反序列化完全失败,应用报错提示XML文件从第一个字符开始就不正确

生成的代码示例

@XmlElement(name = "\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u0421\u0447\u0435\u0442\u043e\u0432")
protected ОткрытиеСчетов открытиеСчетов;

注解中name属性的预期值为ОткрытиеСчетов

Gradle中JAXB生成任务代码

configurations {
    jaxb
}
dependencies {
    implementation("org.glassfish.jaxb:jaxb-runtime:4.0.2")
    implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.2")

    jaxb "com.sun.xml.bind:jaxb-xjc:4.0.2"
    jaxb "org.glassfish.jaxb:jaxb-runtime:4.0.2"
    jaxb "jakarta.xml.bind:jakarta.xml.bind-api:4.0.2"
}

tasks.register('xjcGenerate') {

    def generatedSourcesDir = file("$buildDir/generated/sources/xjc")
    outputs.dir generatedSourcesDir

    doLast {
        ant.taskdef(
                name: 'xjc',
                classname: 'com.sun.tools.xjc.XJCTask',
                classpath: configurations.jaxb.asPath
        )

        ant.xjc(
                destdir: generatedSourcesDir,
                package: 'com.example.generated'
        ) {
            schema(dir: 'src/main/resources/xsd', includes: '*.xsd')
            arg(value: "-encoding")
            arg(value: "UTF-8")
        }
    }
}

compileJava.dependsOn xjcGenerate

compileJava.options.encoding = 'UTF-8'

XSD元素示例

<xs:complexType name="ОткрытиеСчетов">

反序列化错误信息

jakarta.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.

解决方法

调整Gradle配置后排查发现,问题根源在于XML文件的编码格式:UTF-8与UTF-8-BOM的差异。将XML文件的编码改为无BOM的UTF-8格式后,反序列化恢复正常。

内容的提问来源于stack exchange,提问作者Roman Tataev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:04:49