当前位置: 首页 > 面试题库 >

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

秦昂然
2023-03-14
问题内容

我们正在使用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;
    }

更新资料

布莱斯已经回答了。但是,我宁愿不要在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;
    }

}


 类似资料:
  • 我使用JAXB根据一些XSD模式生成java类。对于以下元素: <代码> jaxb生成以下代码: 问题是我们需要使用一些依赖于getter/setter方法命名约定的专有XML工具,例如,对于字段REC_LOC他们希望使用名为getRecLoc(String value)和setRecLoc()的方法,而不是getRECLOC()。 有没有办法自定义jaxb生成的方法名?

  • 问题内容: 我正在使用JAXB来基于某些XSD架构生成Java类。对于诸如以下的元素: jaxb生成以下代码: 问题是我们需要使用一些专有的XML工具,这些工具依赖于getter / setter方法的命名约定。例如,对于字段REC_LOC,他们希望使用名为getRecLoc(String value)和setRecLoc()的方法,而不是getRECLOC()。 有什么方法可以自定义jaxb生成

  • 问题内容: 有一些方法可以在使用JAXB生成的类中生成自定义方法。 我搜索了包括oracle的教程在内的教程,但没有找到明确的说明来说明如何自定义XML Schema中描述的生成类的方法。 问题答案: 您可以编写一个XJC插件: http://weblogs.java.net/blog/kohsuke/archive/2005/06/writing_a_plugi.html

  • 问题内容: 我正在使用Java 6,JaxB 2和SpringSource Tool Suite(与Eclipse相同)。我编写了一些Java类,使用JaxB从中生成XML模式。但是,我注意到为了使用JaxB从Java对象生成XML文档的功能,我需要一个ObjectFactory。 如何生成ObjectFactory而不会浪费我现在已有的类? 问题答案: 更新 这个问题可能指的是创建一个角色的作用

  • 你好,我想用这个查询在spring创建一个自定义查询方法生成器 这是我的方法 这个查询有“(”来组合条件,所以如果可能的话。我不想写查询。谢谢。

  • JAXB为每个属性生成@XmlAttribute注释。例如,属性 转换为带注释的java对象属性 但是,如果属性在名称中没有下划线,则@Xml属性中的名称字段丢失(因此##默认)。我想自定义JAXB绑定,以便也生成没有下划线的名称的注释。有什么建议吗? 谢谢!Johannes