2016-04-18 4 views
1

Ich benutze Gradle, um Java-Klassen basierend auf einer XML-Schema-Datei zu generieren. Ich verwende 'org.glassfish.jaxb: jaxb-xjc: 2.2.11' und 'org.glassfish.jaxb: jaxb-runtime: 2.2.11' als Abhängigkeiten, damit ich 'com.sun.tools.xjc' verwenden kann. XJC2Task 'Klasse zum Generieren der Klassen.Wie ändere ich XmlType von generierten JAXB-Klassen

Dies ist die Schemadatei:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="test" 
      targetNamespace="urn:oio:records:1.0.0" 
      xmlns="urn:oio:records:1.0.0" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:element name="records" type="recordsType"/> 
    <xs:element name="record" type="recordType"/> 

    <xs:complexType name="recordsType"> 
     <xs:sequence> 
      <xs:element ref="record" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="recordType"> 
     <xs:attribute name="key" type="xs:string"/> 
     <xs:attribute name="value" type="xs:string"/> 
    </xs:complexType> 
</xs:schema> 

Einer der generierten Klassen wie folgt aussehen:

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "recordType") 
public class RecordType { 
    @XmlAttribute(name = "key") 
    protected String key; 
    @XmlAttribute(name = "value") 
    protected String value; 

    public String getKey() {return key;} 

    public void setKey(String value) {this.key = value;} 

    public String getValue() {return value;} 

    public void setValue(String value) {this.value = value;} 
} 

Wie kann ich den Namen Wert in der @XmlType Anmerkung ändern? Ich mag es seine

@XmlType(name = "record") 

ich versucht habe, mit einem bindingsfile und versuchte, mit dem <javaType>-Tag in der bindingsfile zu experimentieren, aber ohne Glück.

EDIT: Der Grund, warum ich brauche, dies zu ändern ist, dass ich eine XML-Datei aufteilen müssen, um die stax Splitter von Camel mit (http://camel.apache.org/stax.html Abschnitt „iterieren eine Sammlung JAXB und StAX mit“). Dies zeigt das name-Attribut der @XmlType-Annotation an, um das XML-Tag zu erkennen, das in der Datei aufgeteilt werden soll. Das erkannte Tag (<record>) wird JAXB dann in eine RecordType-Java-Klasse umgewandelt.

Antwort

0

Der Name in der Annotation @XmlType ist der Name des complexType in Ihrer Schemadatei. So ist der Parameter 'name' für diese Annotation definiert.

Also, wenn Sie es ändern wollen, müssen Sie den Namen des complex in Ihrem Schema ändern:

<xs:complexType name="record"> 
    <xs:attribute name="key" type="xs:string"/> 
    <xs:attribute name="value" type="xs:string"/> 
</xs:complexType> 
+0

Ich vergaß zu erwähnen, dass ich nicht die Schema-Dateien ändern kann. Ich habe einige weitere Informationen zu der Frage hinzugefügt, warum ich das brauche. – npeder

Verwandte Themen