Wir verwenden JAXB zum Generieren von Java-Klassen und haben einige Fälle festgestellt, in denen generierte Pluralmethoden nicht korrekt sind. Zum Beispiel, wo wir getPhysicians
erwarten, erhalten wir getPhysicien
. Wie würden wir anpassen, wie JAXB bestimmte Methoden pluralisiert?Wie passen Sie an, wie JAXB mehrere Methodennamen generiert?
Das Schema:
<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>
Der generierte Java-Code:
...
public class PhysicianList {
...
@XmlElement(name = "Physician")
protected List<Physician> physicien;
...
public List<Physician> getPhysicien() {
if (physicien == null) {
physicien = new ArrayList<Physician>();
}
return this.physicien;
}
aktualisieren
Dies wurde von Blaise beantwortet. Ich möchte jedoch Bedenken wie JAXB-Anpassungen in einem XML-Schema nicht mischen. Also für diejenigen von Ihnen mit der gleichen Vorlieben, hier ist eine JAXB Einbindemappe, die das gleiche erreicht wie das, was Blaise vorgeschlagen, JAXB Anpassung aus dem Schema zu halten:
<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>
Es buchstabiert den Arzt nicht einmal richtig, sondern eher physisch * e * n. Seltsam. –
XJC basiert tatsächlich auf dem Elementnamen für Listen, so dass Sie einfach Ihren Elementnamen Ärzte genannt haben könnten. ABER (und es ist ein großes, aber ...) wenn Sie dies tun, gibt es noch eine Eigenart darin, dass wenn Sie das Objekt mit JAXB erneut marschieren, jedes Element den Pluralnamen "Ärzte" haben wird. Sehr komisch. Also habe ich Ihre Herangehensweise benutzt und es funktioniert rundherum. – Simon