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

如何在JAXB绑定中无需适配器将date类型属性转为String?

问题说明

我有一份第三方Schema,其中某个属性类型定义错误(为xs:date),需要通过外部绑定文件将其转换为java.lang.String类型以生成正确的Java类。但当前实现会生成一个冗余的Adapter1类(仅做字符串到字符串的无意义转换),希望避免生成该类。

Schema属性定义

<xs:attribute type="xs:date" name="curso" use="required">
</xs:attribute>

当前绑定文件

<jxb:bindings 
    version="1.0"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jxb:bindings 
            schemaLocation="file.xsd" 
            node="/xs:schema">
        <jxb:bindings node="//xs:element[@name='exportacion_horarios']//xs:attribute[@name='curso']" >
            <jxb:property>
                <jxb:baseType >
                    <jxb:javaType name="java.lang.String" />
                </jxb:baseType>
            </jxb:property>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

生成的冗余适配器类

package com.penalara.ghc_importar_exportar.modelo.personalizados.itaca3.exportacion;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class Adapter1
    extends XmlAdapter<String, String>
{
    public String unmarshal(String value) {
        return new String(value);
    }

    public String marshal(String value) {
        if (value == null) {
            return null;
        }
        return value.toString();
    }
}
解决方案

可以通过修改绑定文件,让XJC直接复用内置的字符串处理逻辑,避免生成冗余适配器。

调整后的绑定文件

<jxb:bindings 
    version="1.0"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jxb:bindings 
            schemaLocation="file.xsd" 
            node="/xs:schema">
        <jxb:bindings node="//xs:element[@name='exportacion_horarios']//xs:attribute[@name='curso']" >
            <jxb:javaType name="java.lang.String" xmlType="xs:date" />
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

原理说明

  • 原写法通过<jxb:property>嵌套<jxb:baseType>再设置<jxb:javaType>,会触发XJC强制生成自定义适配器,即使转换逻辑完全冗余。
  • 调整后直接在目标属性节点上使用<jxb:javaType>,同时指定xmlType为原Schema类型(xs:date)、javaType为目标Java类型(java.lang.String),XJC会识别到这是字符串类型的直接映射,无需额外适配器,直接复用内置处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:15:01