Comment voulez-vous personnaliser la façon dont JAXB génère pluriel des noms de méthode?

Nous sommes à l'aide de JAXB pour générer des classes Java et ont rencontré un certain nombre de cas où généré le pluriel des noms de méthode ne sont pas correctes. Par exemple, où nous nous attendons à getPhysicians nous sommes getPhysicien. Comment ferions-nous pour personnaliser la façon dont JAXB pluralizes des méthodes spécifiques?

Le schéma:

<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>

Le code Java généré:

...
public class PhysicianList {
...

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

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

Mise à jour

Ce qui a été répondu par Blaise. Cependant, je préfère ne pas mélanger des préoccupations telles que JAXB personnalisations dans un schéma XML. Donc, pour ceux d'entre vous avec la même préférence, voici une JAXB de liaison de fichier qui réalise la même chose que ce que Blaise a suggéré, en gardant JAXB personnalisation de sortir du schéma:

<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>
  • Il n'a même pas épeler médecin correctement, mais plutôt en tant que physicien. Étrange.
  • XJC en fait la base sur le nom de l'élément de liste, de sorte que vous pouvez avoir appelé votre nom d'élément médecins. MAIS (et c'est un gros mais...) si vous faites cela, il est encore un caprice, car lorsque vous re-maréchal de l'objet à l'aide de JAXB chaque élément aura le nom pluriel 'médecins'. Très bizarre. Donc, cela dit, j'ai utilisé votre approche et il fonctionne sur tout le tour.
InformationsquelleAutor SingleShot | 2010-12-21