JAXB xjc:如果值为空,如何生成返回空的字符串代码?

2024-01-10

给出以下示例 xsd 片段:

< xs:attribute name="SEGMENT"  default="" use="optional" type="xs:string"/ >

当 xjc 生成包含以下内容的类时SEGMENTbean 属性,以下 getter 是自动生成的:

public String getSEGMENT() {
    if (segment == null) {
        return "";
    } else {
        return segment;
    }
}

我的问题是你如何让它做同样的事情xs:element物体?换句话说,给出以下 xsd 片段:

< xs:element name="NAME" default="" type="xs:string"/ >

我想知道是否可以让 xjc 生成以下内容:

public String getNAME() {
    if (name == null) {
        return "";
    } else {
        return name;
    }
}

如何才能做到这一点?


JAXB 不会为具有默认值的元素生成与为具有默认值的属性相同的代码,因为XML 模式区分元素和属性默认值 http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints:

属性和元素的默认值都使用 default 属性来声明,尽管该属性在每种情况下的结果略有不同。当使用默认值声明属性时,该属性的值就是实例文档中显示为该属性值的任何值;如果该属性没有出现在实例文档中,则模式处理器为该属性提供与默认属性相同的值。请注意,只有当属性本身是可选的时,属性的默认值才有意义,因此同时指定默认值和除可选值以外的任何值都是错误的。

模式处理器处理默认元素的方式略有不同。当使用默认值声明元素时,该元素的值就是实例文档中作为元素内容出现的任何值;如果该元素没有任何内容出现,则模式处理器向该元素提供等于默认属性的值。然而,如果该元素没有出现在实例文档中,则模式处理器根本不提供该元素。总之,元素和属性默认值之间的差异可以表述为:当属性缺失时应用默认属性值,当元素为空时应用默认元素值。

您始终可以依靠缺失属性的默认值(这里是特殊的 getter),但存在缺失元素值的问题。

尽管如此,当您解组实例时,解组器知道如何处理默认值。请参阅此处了解详细信息:

  • 元素默认值和编组 http://jaxb.java.net/2.2.5/docs/ch03.html#marshalling-element-default-values-and-marshalling
  • 元素默认值和解组 http://jaxb.java.net/2.2.5/docs/ch03.html#unmarshalling-element-default-values-and-unmarshalling

XJC 不会添加 getter 代码或使用默认值初始化字段,因此如果您需要“空安全检查”,您可以自己添加manually在XJC生成代码后或者尝试使用一些插件自动执行:

  • JAXB 2 默认值插件 http://java.net/projects/jaxb2-commons/pages/Default-Value
  • CXF XJC 默认值插件 http://cxf.apache.org/cxf-xjc-dv.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB xjc:如果值为空,如何生成返回空的字符串代码? 的相关文章

随机推荐

  • 查询在 while 循环中无法正常工作

    我有一个 While 循环 我试图插入 DECLARE CurrentOffer int 121 DECLARE OldestOffer int 115 DECLARE MinClubcardID bigint 0 DECLARE MaxC
  • PHP脚本在特定时间执行

    有没有一种简单的方法可以让 php 脚本在一天中的特定时间执行一些 html 例如 我的主页上有一个标题 有时我希望能够在标题下方添加一些内容 在本例中是一个 iframe 我知道每个人都提到了 cron 作业 但是这将如何工作呢 还有替代
  • 使用 CSS3 过渡的动画 jQuery UI 可排序

    我如何使用 CSS3 过渡 或任何其他方式 来制作jQuery 可排序 http jqueryui com sortable 其行为更像是 iOS 中的列表重新排序 其中列表项在拖动时会平滑地进行动画处理 因此当您拖动时 项会迅速移开 编辑
  • dc.js barChart 第一个和最后一个栏未完全显示

    我有一个条形图d3 time scalex 轴 我每小时显示一些数据 但使用时第一个和最后一个数据点条总是被切成两半centerBar true 当使用centerBar false 最后一个栏完全消失 时间窗口基于数据本身 计算如下 va
  • Apache Spark 中的递归方法调用

    我正在从 Apache Spark 上的数据库构建一个家谱 使用递归搜索来查找数据库中每个人的最终父级 即家谱顶部的人 假设搜索 id 时返回的第一个人是正确的父母 val peopleById peopleRDD keyBy f gt f
  • 给react中的动态数组元素一个图标

    我有一个动态数量的数组 例如 1 2 3 5 7 1 2 3 2 7 8 其中元素代表平台 ID 有助于唯一识别 PlayStation Xbox 等平台 I want to link a react icon https react ic
  • DirectX:如何绘制平滑的 2D 水(基于粒子的水)

    我最近使用粒子 1000 1500 工作 使用斯托克斯方程 进行水模拟 但我的问题是我使用 IDXSprite 它只是使用蓝色纹理四边形 7x7 绘制粒子 看起来不太平滑 是否有任何方法或已知技术来绘制此类系统 使表面看起来光滑 并且水不应
  • 如何更新 ActiveStorage 中的附件 (Rails 5.2)

    我最近将我的项目升级到最新的 Rails 版本 5 2 以获得ActiveStorage 一个处理附件上传到云服务 如 AWS S3 Google Cloud 等 的库 几乎一切都工作正常 我可以上传并附加图像 user avatar at
  • C#:使用具有多个图像的 .ico 文件

    我试图从包含两个图标的 ico 文件中设置 C 中的 TreeView 中的图像 32x32 版本和 16x16 版本 图像正在设置 但 Net 选择 32x32 版本 并将其缩小 看起来很糟糕 而不是选择现成的 16x16 图像 相关代码
  • aspnet core 中的部分视图发布子模型?

    我有一个视图 其中包含包含各种不同部分的选项卡 我将每个选项卡实现为部分视图 有一个 ViewModel 它具有各种子类来填充选项卡中的视图和部分视图 FormCaptureViewModel FormDetailViewModel For
  • C++链接器会自动内联函数(没有“inline”关键字,没有在标头中实现)吗?

    C 链接器是否会自动内联 传递 函数 这些函数未在标头中定义 并且未明确请求通过inline关键词 例如 发生以下情况so often 并且应该always受益于 内联 似乎每个编译器供应商都应该通过链接器通过 内联 自动 处理它 在可能的
  • Blazor 客户端应用程序级别异常处理

    如何全局处理客户端 Blazor 应用程序的应用程序级别异常 您可以创建一个处理 WriteLine 事件的单例服务 这只会在错误时被触发 这要归功于Console SetError this public class ExceptionN
  • liquibase - 变更集的执行顺序

    据我了解 Liquibase 根据更改日志中写入的顺序执行更改集 我希望变更集以另一个顺序运行 有没有办法改变变更集的执行顺序 如果能及时回复我的问题 我将不胜感激 Liquibase 中变更日志的顺序是根据需要部署 执行 更改的顺序 Li
  • 在 django-rest-framework-jwt 中存储超过默认信息

    我正在使用 Django 版本 1 8 并使用 django rest framework jwt 进行身份验证 身份验证后 我们的应用程序将返回前端信息 from rest framework jwt settings import ap
  • 如何将 uuid 添加到 log4j 以登录文件?

    我有这个 log4j2 xml 文件
  • 如何将本地文件上传到Carrierwave模型?

    我使用 Carrierwave 来处理图像上传 但我没有使用表单 而是使用服务器中的本地文件 我怎样才能做到这一点 user User first image path tmp pic s7b28 jpg user image image
  • chrono::month 和 chrono::months 之间有什么区别

    C 20 chrono 类型 值之间有什么区别month 7 and months 7 有两个如此相似的名字是不是很混乱 是的 两者兼而有之可能会令人困惑month and months当第一次遇到这个库时 然而 该库中有一致的命名约定 有
  • python中while循环的多个条件

    我遇到了问题 包括多个语句while在Python中循环 它在单个条件下工作得很好 但是当我包含多个条件时 循环不会终止 我在这里做错了什么吗 name raw input Please enter a word in the senten
  • 使用 mongodb java 驱动程序运行本机 mongodb 查询

    我想用java执行CRUD操作updateOne updateMany or deleteMany 等等 但是当我想与像这样的运算符一起运行时 set unset我必须导入新课程 例如Updates或创建嵌套Document对象 我想插入原
  • JAXB xjc:如果值为空,如何生成返回空的字符串代码?

    给出以下示例 xsd 片段 lt xs attribute name SEGMENT default use optional type xs string gt 当 xjc 生成包含以下内容的类时SEGMENTbean 属性 以下 get