如何自定义 JAXB 生成复数方法名称的方式?

2024-02-19

我们使用 JAXB 生成 Java 类,遇到了一些生成的复数方法名称不正确的情况。例如,我们期望的地方getPhysicians我们正在得到getPhysicien。我们如何自定义 JAXB 复数特定方法的方式?

架构:

<xs:complexType name="physician">
    <xs:sequence>
       ...
    </xs:sequence>
</xs:complexType>

<xs:complexType name="physicianList">
    <xs:sequence>
        <xs:element name="Physician"
                    type="physician"
                    minOccurs="0"
                    maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

生成的Java代码:

...
public class PhysicianList {
...

    @XmlElement(name = "Physician")
    protected List<Physician> physicien;
    ...

    public List<Physician> getPhysicien() {
        if (physicien == null) {
            physicien = new ArrayList<Physician>();
        }
        return this.physicien;
    }

Update

布莱斯已经回答了这个问题。然而,我不喜欢在 XML 模式中混合诸如 JAXB 自定义之类的关注点。因此,对于那些具有相同偏好的人来说,这里有一个 JAXB 绑定文件,它实现了与 Blaise 建议相同的功能,将 JAXB 自定义保留在模式之外:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               version="2.0">

    <jaxb:bindings schemaLocation="myschema.xsd">
        <jaxb:bindings node="//xs:complexType[@name='physicianList']//xs:element[@name='Physician']">
            <jaxb:property name="physicians"/>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

默认情况下,会为您的模式片段生成以下内容:

    import java.util.ArrayList;
    import java.util.List;
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlType;

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "physicianList", propOrder = {
        "physician"
    })
    public class PhysicianList {

        @XmlElement(name = "Physician")
        protected List<Physician> physician;

        public List<Physician> getPhysician() {
            if (physician == null) {
                physician = new ArrayList<Physician>();
            }
            return this.physician;
        }

    }

如果您注释 XML 模式:

    <xs:schema
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        jaxb:version="2.1">

        <xs:complexType name="physician">
            <xs:sequence>
            </xs:sequence>
        </xs:complexType>

        <xs:complexType name="physicianList">
            <xs:sequence>
                <xs:element name="Physician"
                            type="physician"
                            minOccurs="0"
                            maxOccurs="unbounded">
                      <xs:annotation>
                          <xs:appinfo>
                              <jaxb:property name="physicians"/>
                          </xs:appinfo>
                      </xs:annotation>
                 </xs:element>
            </xs:sequence>
        </xs:complexType>

    </xs:schema>

然后就可以生成所需的类:

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "physicianList", propOrder = {
    "physicians"
})
public class PhysicianList {

    @XmlElement(name = "Physician")
    protected List<Physician> physicians;

    public List<Physician> getPhysicians() {
        if (physicians == null) {
            physicians = new ArrayList<Physician>();
        }
        return this.physicians;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自定义 JAXB 生成复数方法名称的方式? 的相关文章

随机推荐

  • 有谁知道 pymongo 中 2dsphere 索引的工作示例吗?

    我正在尝试编写一个脚本来执行此处提到的基本 2dsphere 索引操作2dsphere http docs mongodb org manual core 2dsphere 使用 pymongo 我找不到任何例子来弄清楚 这是我迄今为止的尝
  • OleDbDataAdapter Fill 和 OleDbDataReader 需要 3-5 分钟来填充

    这是一个非常奇怪的问题 因为它只发生在随机的全新 Windows 10 电脑上 填充数据适配器或数据读取器需要 1 5 分钟 这是从 Windows 7 旧电脑升级到全新 Windows 10 电脑时发生的第三台电脑 第一次出现是在一年前
  • JSON 导入到 Excel

    是否可以在宏中编写 JSON 调用脚本 我想通过 API 连接获取 JSON 字符串 看起来问题是 Excel 期望参数在 HTML 字符串中传递 但 JSON 在 HTML 正文中传递参数 有任何想法吗 由于这是VBA 我会使用COM来调
  • 未为我的带有 Firebase 动态链接的网站设置 UTM 参数

    我需要缩短我的网站网址 我选择 Firebase 动态链接 https firebase google com docs dynamic links https firebase google com docs dynamic links
  • java.lang.ClassCastException,通过 JNDI 查找获取 Entitymanager

    我是 JPA 新手 正在开发一个 web 应用程序 J2EE 其中该 web 应用程序位于 Tomcat 中 所以我无法使用 PersistenceContext 我决定使用 Helper 类 一切都很顺利 然后我决定实现 JNDI 进行连
  • 实施 Izhikevich 神经元模型

    我正在尝试实现 Izhikevich 模型的尖峰神经元 这种类型神经元的公式非常简单 v n 1 0 04 v n 2 5 v n 140 u n I u n 1 a b v n u n 其中 v 是膜电位 u 是恢复变量 If v超过 3
  • ng-repeat 排序在 jQuery 中抛出异常

    我有一个表 其中包含由 ng repeat 创建的行 表头有一个 ng click 用于设置排序谓词 该函数还确定方向 asc desc 排序工作正常 但由于某种原因 每次更改谓词并且排序触发时 我都会收到 jQuery 的异常 这是我正在
  • 从 SFSpeechRecognizer 获取语音幅度

    我正在使用这个库https github com appcoda SpeechToTextDemo https github com appcoda SpeechToTextDemo将语音转录为文本 我想要真实的语音幅度来显示这个库的语音图
  • iOS 9 点播资源可以永久保留吗?

    根据文档 iOS 9 通过 NSBundleResourceRequest 下载的按需资源仅保留到endAccessingResources被调用 并且被自动调用当资源请求对象被释放时 好的 但是当应用程序终止时 一切被解除分配 那么这是否
  • 在 GitHub 上拥有公共存储库的私有分支吗?

    我在 GitHub 存储库中有一个公共 PHP 项目 其中仅包含一个分支 主分支 我想要一个对我来说是私有的单独分支 分支 我已经为私有 GitHub 存储库付费 我希望能够将私人分支 分叉的更改合并到公共存储库 反之亦然 考虑到这一点 我
  • 在delphi 2009中创建gif动画文件?

    gif TgifImage Create gif Width 100 gif Height 100 gif AnimationSpeed 500 gif Animate true gif add image1 Picture Bitmap
  • Laravel:PDO异常,即使安装并测试了驱动程序也找不到驱动程序[重复]

    这个问题在这里已经有答案了 我正在开发一个 Laravel 5 1 项目 该项目必须连接到现有的 MS SQL Server 数据库 我的项目当前位于使用 Apache 2 4 18 的 Ubuntu 16 04 LTS 服务器上 我已在计
  • 什么时候发送HTTP状态码?

    目前 在我的 PHP 脚本中 当用户尝试访问不存在或不属于该用户的内容时 我会将用户重定向到自定义 404 未找到错误页面 就像这样 header Location http www mydomain com error notfound
  • 文件引用与文件?

    我想制作一个 Flash 应用程序 用户可以在其中从本地硬盘驱动器加载文件并将文件保存到本地硬盘驱动器 虽然我经常在 AIR 应用程序中使用File and FileStream类 我以前没有在 SWF 中这样做过 据我所知FileRefe
  • 使用“get”来访问地图有什么好处

    从这个问题跟进 按关键字进行惯用的 clojure 映射查找 https stackoverflow com questions 7034803 idiomatic clojure map lookup by keyword 使用 cloj
  • Spring Rest 和 jQuery Ajax 文件下载

    我目前正在使用 jQuery 和 Spring Rest jQuery 用于向服务器上传和下载文件 上传过程工作正常 但下载文件时没有什么问题 所以场景是 在视图中 用户将选择n个要下载的文件并单击下载按钮 一旦用户单击该按钮 文件就会被下
  • angular.js 选择输入框的过滤类型

    我使用 angular js 的时间很短 有时我有一种感觉 我对 html 和 javascript 一无所知 因为 Angular 在遇到我想象中应该的东西时 可能非常简单 这是我头痛的地方 我的电流控制器scope persons是工厂
  • 为动态加载的新元素添加tinymce

    我的页面包含 5 个 div 可以通过 Tinymce 内联编辑器进行编辑 我可以通过单击按钮 如此动态 来轻松地使用 Jquery 加载 5 个新的 但当然 新的 div 不会受到 Tinymce 的影响 因为 init 已经加载了 我怎
  • 如何在 wpf 中将 List 转换为 ObservableCollection

    我在 wpf 中 有一个通用列表 List 现在我希望将其转换为通用的可观察集合 ObservableCollection 我知道我可以迭代列表并将每个单独的项目添加到 Observable 集合中 然而 在我看来 必须有一种内置的方法来做
  • 如何自定义 JAXB 生成复数方法名称的方式?

    我们使用 JAXB 生成 Java 类 遇到了一些生成的复数方法名称不正确的情况 例如 我们期望的地方getPhysicians我们正在得到getPhysicien 我们如何自定义 JAXB 复数特定方法的方式 架构