schema-Validierung mit xerces und jdom: bug in java 1.4?

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Hallo,

ich hoffe ihr könnt mir bei folgendem weiterhelfen:

ich nutze:

- java 1.4
- jdom 1.0
- xerces

Damit möchte ich nun eine xml-Datei gegen ein vorhandenes Schema validieren.

Auf der jdom-Seite steht dazu folgendes howto:

Code:
SAXBuilder builder =
  new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
builder.setFeature(
  "http://apache.org/xml/features/validation/schema", true);
builder.setProperty(
  "http://apache.org/xml/properties/schema/external-schemaLocation",
  "http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd" + " " +
  "http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd");
Document doc = builder.build(xml);

Genau so mache ich es, mein Code-Teil:

Code:
		SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
		
		saxBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);
		
		saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", "C:\\projects\\rfq.xsd");
		
		try {
			saxBuilder.build(new StringReader(tenderML));
		} catch (JDOMException e) {
			e.printStackTrace();
			System.exit(-1);
		} catch (IOException e) {
			e.printStackTrace();
		}

So weit, so gut.......Leider kriege ich bei der Ausführung die Fehlermeldung:


org.jdom.input.JDOMParseException: Error on line 2: cvc-elt.1: Cannot find the declaration of element 'tender'.

tender ist mein root-Element im xml-Dokument.
Aber die Pfade stimmen, auch die schema-Datei hab ich bei w3c validieren lassen.

ausgiebiges googeln lässt mich nun vermuten das das ein Bug in 1.4 in Bezug auf xerces ist, aber sicher bin ich mir nicht da ich darüber widersprüchliche Informationen gefunden habe.

Deshalb nun meine Frage an euch:

Hat jemand die gleiche Kombination laufen wie ich und validiert damit xml-Dokumente gegen Schemas?

Kennt jemand diesen Bug?

Gibt es Lösungen für dieses Problem?

Vielen Dank im Voraus für alle Antworten........
 

byte

Top Contributor
Du musst den Pfad zu Deiner XSD-Datei als URI String angeben. Versuch mal folgendes:

Code:
saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", new File("C:/projects/rfq.xsd").toURI().toString());
 

jollyroger

Bekanntes Mitglied
Hallo,

danke für den Tip, aber das hat leider nichts gebracht.

Mein Code sieht jetzt so aus:

Code:
SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
		
		saxBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);
		
		saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", new File("C:/projects/rfq.xsd").toURI().toString());
		
		try {
			saxBuilder.build(new StringReader(tenderML));
		} catch (JDOMException e) {
			e.printStackTrace();
			System.exit(-1);
		} catch (IOException e) {
			e.printStackTrace();
		}

Der Anfang des xml-files:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<tender>
   <internal>
      <called_datetime>0002.12.31 -- 12:00:00</called_datetime>
      <insert_datetime>0002.12.31 -- 12:00:00</insert_datetime>

Und der Anfang des schema-files:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="tender">
	<xs:complexType>
		<xs:sequence>
		
			

			<xs:element name="internal">
				<xs:complexType>
					<xs:sequence>
						
						<xs:element name="called_datetime" type="xs:dateTime" default="0000-00-00T00:00:00" />
						<xs:element name="insert_datetime" type="xs:dateTime" default="0000-00-00T00:00:00" />

Ich krieg leider immer noch den Fehler:

Code:
org.jdom.input.JDOMParseException: Error on line 2: cvc-elt.1: Cannot find the declaration of element 'tender'.
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:468)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:851)


Noch irgendwelche Ideen?


EDIT:

Mir ist gerade noch was aufgefallen:

Ändere ich den Pfad so das er falsch ist, z.b. C:blablub, was es nicht gibt krieg ich immer noch den gleichen Fehler?

Müsste da nicht vorher eine FileNotFoundException kommen?
 

byte

Top Contributor
Hatte wohl beim ersten Mal was übersehen: Du musst bei diesem Property auch den Namespace mit angeben. Ansonsten musst Du das Property external-noNamespaceSchemaLocation verwenden. Nähere Infos dazu siehe hier.

Wildcard hat gesagt.:
Ich dachte eigentlich der 1.4er Xerces kann gar nicht gegen ein Schema validieren ???:L

Ich glaube, Du verwechselst das mit dem Standard JAXP Parser in 1.4. Der kanns nicht, Xerces aber schon.
 

jollyroger

Bekanntes Mitglied
Hallo,

erstmal vielen Dank für eure Hilfe...

external-noNamespaceSchemaLocation :

Damit klappt die Validierung jetzt, mit dem Nachteil das mein dokument keinen Namespace hat, was es aber haben soll.......

Ich verstehe es einfach nicht, warum das nicht klappt, ich fasse nochmal zusammen mit allen Änderungen:


Mein xml-schema, vom w3c-Validator validiert:


Code:
<?xml version="1.0" encoding="UTF-8"?>
<trcs:schema xmlns:trcs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">



<trcs:element name="tender">
	<trcs:complexType>
		<trcs:sequence>
		
			

			<trcs:element name="internal">
				<trcs:complexType>
					<trcs:sequence>
						
						<trcs:element name="called_datetime" type="trcs:dateTime" default="0000-00-00T00:00:00" />
						<trcs:element name="insert_datetime" type="trcs:dateTime" default="0000-00-00T00:00:00" />

Meine xml-Datei:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<tender xmlns="trcs">
   <internal>
      <called_datetime>2002-12-31T12:00:00</called_datetime>
      <insert_datetime>2002-12-31T12:00:00</insert_datetime>

Hier der java-Code zum Validieren:


Code:
		SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
		
		saxBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);
		
		saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", 
								new File("C:/projects/trcs/prozesse/tenderml/rfq.xsd").toURI().toString());
				
		try {
			saxBuilder.build(new StringReader(tenderML));
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

ergibt den Fehler:

Code:
org.jdom.input.JDOMParseException: Error on line 2: cvc-elt.1: Cannot find the declaration of element 'tender'.

Bin mit meinem Latein am Ende, ich möchte / muss einen Namespace verwenden, und ich sehe einfach keinen Fehler.....

noch irgendwelche Ideen?
 

byte

Top Contributor
Wenn Du das Property external-schemaLocation setzen willst, dann musst Du den Target Namespace explizit angeben. Versuch mal folgendes:

Code:
String schemaURI = new File("C:/projects/trcs/prozesse/tenderml/rfq.xsd").toURI().toString();
String targetNS = "http://www.w3schools.com";

...

saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", targetNS + " " + schemaURI);
 

jollyroger

Bekanntes Mitglied
hallo,

leider funktioniert das auch nicht...

Der validierende Code sieht nun so aus:

Code:
		String schemaURI = new File("C:/projects/trcs/prozesse/tenderml/rfq.xsd").toURI().toString();
		String targetNS = "http://www.w3schools.com";
		
		SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
		
		saxBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);
		
		saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", targetNS + " " + schemaURI);

Stimmt vielleicht die Namespace-Deklaration im xml-schema nicht?
Der w3c-Validator sagt das es ok ist.........

Hier nochmal die Deklaration, ich möchte "trcs" als namespace haben:


Code:
<?xml version="1.0" encoding="UTF-8"?>
<trcs:schema xmlns:trcs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">




<trcs:element name="tender">
	<trcs:complexType>
		<trcs:sequence>

Das sieht für mich soweit ok aus....

Im erzeugten xml-Dokument sieht das dann so aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<tender xmlns="trcs">
   <internal>
      <called_datetime>2002-12-31T12:00:00</called_datetime>

sieht für mich auch ok aus...

Dummerweise bleibt der Fehler der gleiche.........

Danke für die Hilfe soweit, wäre super wenn du noch einen Tip hast, jetzt hab ich mich solange damit rumgeschlagen, das ich nicht aufgeben möchte........:)
 
G

Gast

Gast
Versuch dein targetNS so zu ändern:
String targetNS = "http://www.w3schools.com/";
es muss unbedingt ein slash am ende sein, sonst wird's nicht funktionieren
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B XML Schema Validierung des Zahlenbereichs XML & JSON 3
H Schema-Validierung mit JDOM XML & JSON 2
C Validierung klappt nicht mit Schema XML & JSON 2
G Problem mit XML-Schema Validierung mit Java XML & JSON 12
E Wie kann ich ein XSD-Schema in einer JSP-Seite verwenden? XML & JSON 7
P Eclipse Rinzo - Schema muss mit DOCTYPE "root" übereinstimmen XML & JSON 0
K XML Schema list unique value restriction XML & JSON 0
F.S.WhiTeY JAXB: Schema nicht "erben" XML & JSON 2
Q Konvertierung von json zum Java Objekt nach vorgegebenem Schema XML & JSON 3
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
G Suche guten freien XML Schema (XSD) Editor XML & JSON 7
X XML Schema Beziehungen validieren XML & JSON 1
F XML-Schema mapping XML & JSON 6
D eine Schema für ein andere Schema XML XML & JSON 14
P Qualifizierung und XML- Schema XML & JSON 2
G mit EMF gegen XML-Schema validieren XML & JSON 7
V JAXB schema 2 java XML & JSON 3
M XML Schema & Attribut Bedingung XML & JSON 2
B Einschränken der Eingabe bei XML SCHEMA XML & JSON 2
S finde den Schema-Compiler "xjc" nicht XML & JSON 4
P XSD Schema: Konstanten mit "fixed" erzeugen geht nicht ??? XML & JSON 3
G Eindeutige Kennnummer Schema XML & JSON 3
S XML-Schema einlesen um parsen zu erleichtern? XML & JSON 2
T Schema --> GUI (User) --> XML XML & JSON 5
T Klassen aus XML-Schema generieren und füllen XML & JSON 10
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
J XML - schreiben und einlesen (Schema) XML & JSON 14
A xml-schema aus wsdl auslagern in eine eigene xsd-Datei XML & JSON 3
H xml - Schema : warum passen die nicht zueinander XML & JSON 2
J XML-Schema: Beliebige Unterelemente zulassen XML & JSON 4
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
J JDOM mit XML-Schema XML & JSON 8
P Datentyp in Schema definieren XML & JSON 2
S XML Schema XML & JSON 7
N Externes Schema inkludieren XML & JSON 7
A XML Dokument aus einem Schema ableiten/generieren? XML & JSON 6
Z beispiel für valides Xml-Dokument durch XML-Schema XML & JSON 5
Z Frage zu XML Schema XML & JSON 3
T XML mit Java gegen Schema validieren XML & JSON 6
S Validierung einer XML-Datei - Führende Leerzeichen und Tabs XML & JSON 10
C xml validierung gegen xsd mit jdom: Fehlermeldung Cannot find the declaration of element ... XML & JSON 8
J JSon <-> XML zwecks Validierung XML & JSON 4
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
S Validierung mit JAXB2 ohne root-element XML & JSON 10
H XML via XSD Validierung nicht möglich? XML & JSON 2
R XML-Validierung mittels XSD unter Eclipse XML & JSON 2
D jaxb validierung/verification vor marshalling XML & JSON 3
S XML Validierung mit XSD über DOM - Cannot find. XML & JSON 4
G Validierung von XML-Dokumenten XML & JSON 7
R Parsen einer XML ohne Validierung XML & JSON 2
leifg XSD Validierung mit JDK 1.3 XML & JSON 3
Zed XML dom4j xsd- Eigenschaften/Validierung XML & JSON 3
N XML Datei auslesen / Validierung XML & JSON 4
pkm Xerces Installation testen XML & JSON 4
D Wie installiert man Xerces? XML & JSON 5
K jaxp.jar, xalan.jar, xerces.jar XML & JSON 2
S Java 6 und Xerces-j-2-9 XML & JSON 3
M Xerces -Parsen mit einer externen Schemadatei geht nicht XML & JSON 2
X xml und xsl parsen mit xerces XML & JSON 8
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben