JAXB Binding Attribute

Hardi82

Mitglied
Hallo Leute,

ich möchte mir via JAXB und einem xsd-Schema meine Klassen generieren lassen. Soweit funktioniert das auch. Allerdings habe ich nun festgestellt, dass bei der Transformation alle Elemente vom Type=anyType in Objects umgewandelt werden. Auch das ist soweit verständlich. Nun komme ich aber irgendwie nicht an die Werte der Elemente ran. Daher habe ich mir überlegt, mittels der Binding-Konfigurationsdatei dort, wo ich es brauche, anyType in String umwandeln zu lassen. Da steh ich momentan auf dem Schlauch. Wie muss ich wo was eintragen?

Code der Bindingdatei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <jxb:bindings schemaLocation="CrefoSystemInterface.xsd" node="/xs:schema">
    <jxb:globalBindings generateElementClass="true" />
    <jxb:bindings node=".//xs:complexType[@name='Type_errorNotification']">
      <jxb:class name="TypeErrorNotificationList" />
    </jxb:bindings>
  </jxb:bindings>
</jxb:bindings>

Elementstruktur in dem xsd-Schema:
Code:
	<xs:complexType name="Auto">
		<xs:sequence>
			<xs:element name="farbe"/>
			<xs:element name="anzahltueren" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>

Wo genau muss ich jetzt ansetzen, um bspw. die Farbe als String-Attribut in mein Auto-Objekt zu bekommen?

Grüße
 
So, ich habe jetzt folgendes herausgefunden:

Code:
    <jxb:bindings node=".//xs:complexType[@name='Auto]">
    	<jxb:bindings node=".//xs:element[@name='farbe']">
    		<jxb:property>
    			<jxb:baseType name="java.lang.String"/>
    		</jxb:property>
    	</jxb:bindings>
    </jxb:bindings>

Das ergibt in meiner generierten Klasse folgendes Bild:

Code:
/**
 * <p>Java class for Auto complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="Auto">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="farbe" type="{http://www.w3.org/2001/XMLSchema}anyType"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlType(name = "Auto", propOrder = {
    "farbe"
})
public class Auto {

    @XmlElement(type = Object.class)
    protected String farbe;
    ....
}

Sieht soweit ganz gut aus, allerdings wenn ich dann eine XML-Datei auslesen will, bekomme ich folgende Exception:

Code:
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl
	at de.mypackage.Auto$JaxbAccessorF_farbe.set(FieldAccessor_Ref.java:20)
	at com.sun.xml.bind.v2.runtime.reflect.Accessor.receive(Accessor.java:121)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:404)
	at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:125)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
	at
 .....

Scheint zu sein, dass er von Object auf String casten will, was natürlich nicht geht :(. Hat jemand eine Idee, wo ich da weiter ansetzen muss? BTW: Schema kann ich leider nicht anpassen.

Grüße
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück