xsd:element maxOccurs

schnuffie

Erfahrenes Mitglied
Hallo Experten,

ich arbeite mit JAXB 2.0 und habe im Schema ein Element, das mindestens 1x, aber höchstens 3x vorhanden sein soll:

HTML:
<xsd:element name="geschmack" type="GeschmackType" minOccurs="1" maxOccurs="3" />

"GeschmackType" ist eine Enum.
In der generierten Klasse sieht das dann so aus:

Code:
	public List<GeschmackType> getGeschmack() {
		return this._getGeschmack();
	}
	public boolean isSetGeschmack() {
		return ((this.geschmack!= null)&&(!this.geschmack.isEmpty()));
	}
	public void unsetGeschmack() {
		this.geschmack = null;
	}

In der "isSetGeschmack()"-Methode erkennt man die Umsetzung von "minOccurs".

Beim Einlesen meiner XML-Datei kommt allerdings kein Fehler bei meinem Test-Beispiel mit 4 Geschmacksangaben, obwohl das doch im Schema mit "maxOccurs" ausgeschlossen sein müßte. Doch auch im Code kann ich nichts erkennen, wo der Inhalt der Liste auf maximal 3 Elemente begrenzt wird.
Das Einlesen meiner Test-XML funktioniert fehlerfrei.

Unterliege ich hier einem Denkfehler oder liegt das Problem im Schema? :confused:
 
Ich hab's inzwischen herausgefunden. *freu* Für alle, die's interessiert:

HTML:
			Unmarshaller u = jc.createUnmarshaller();
			try {
				SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
				Schema schema = schemaFactory.newSchema(new File("beispiel.xsd"));
				u.setSchema(schema);
			} catch (SAXException e) {
				System.out.println(e.getMessage());
				//also kein spezielles Schema setzen, damit ist auch keine Validierung möglich
			}
			JAXBElement element = (JAXBElement) u.unmarshal(new File(
					"beispiel.xml"));

Mit der roten Erweiterung hat's dann endlich den erhofften Fehler "gehakelt":

HTML:
javax.xml.bind.UnmarshalException
- with linked exception:

[org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'geschmack'. One of '{"":gewicht}' is expected.]
 

Neue Beiträge

Zurück