Probleme mit Zugriff auf eXist-Datenbank

Status
Nicht offen für weitere Antworten.

Barthi

Mitglied
Hallo!

Ich möchte eine Java-Anwendung zur Verwaltung von Schacht-Daten erstellen. Zur Speicherung der Daten möchte ich gerne die EXIST-Datenbank benutzen.

Ich hab diese jetzt als Servlet im Tomcat installiert. Funktioniert so weit auch ganz gut.

Hab ne Collection "schaechte" angelegt und zunächst von Hand ein XML-File "Schacht1.xml" reingeladen. Das funktioniert über das Webinterface sehr gut.

Jetzt wollte ich in Java das Dokument auslesen (wie im Retrieve-Beispiel von Exist).

Hier der Code:
Code:
import javax.xml.transform.OutputKeys;
import org.exist.storage.serializers.EXistOutputKeys;
import org.exist.xmldb.EXistResource;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.modules.XMLResource;

public class Retrieve {

	protected static String driver = "org.exist.xmldb.DatabaseImpl";

	protected static String URI = "xmldb:exist://localhost:8080/db";

	protected static void usage() {
		System.out.println("usage: org.exist.examples.xmldb.Retrieve collection docName");
		System.exit(0);
	}

	public static void main(String args[]) throws Exception {
		
		String collection = "schaechte";

		// initialize database drivers
		Class cl = Class.forName(driver);
		Database database = (Database) cl.newInstance();
		database.setProperty("create-database", "true");
		DatabaseManager.registerDatabase(database);

		// get the collection
		Collection col = DatabaseManager.getCollection(URI + collection);
		col.setProperty(OutputKeys.INDENT, "yes");
		col.setProperty(EXistOutputKeys.EXPAND_XINCLUDES, "no");
		col.setProperty(EXistOutputKeys.PROCESS_XSL_PI, "yes");
		
		XMLResource res = (XMLResource)col.getResource("Schacht");
		if(res == null)
			System.out.println("document not found!");
		else {
			System.out.println(res.getContent());
			System.out.println("Size: " + ((EXistResource)res).getContentLength());
		}
	}
}


Beim Ausführen aus Eclipse heraus bekomm ich dann folgende Fehlermeldung:

Code:
Fatal error parsing XML: org.xml.sax.SAXParseException: end tag </head> does not match begin tag <meta>
Fatal error parsing XML: org.xml.sax.SAXParseException: end tag </td> does not match begin tag <img>
Fatal error parsing XML: org.xml.sax.SAXParseException: end tag </a> does not match begin tag <img>
Fatal error parsing XML: org.xml.sax.SAXParseException: end tag </td> does not match begin tag <a>
Fatal error parsing XML: org.xml.sax.SAXParseException: end tag </tr> does not match begin tag <td>
Fatal error parsing XML: org.xml.sax.SAXParseException: end tag </table> does not match begin tag <a>
Fatal error parsing XML: org.xml.sax.SAXParseException: attribute name not followed by '='
java.lang.NullPointerException
	at org.exist.xmldb.RemoteCollection.getResource(RemoteCollection.java:290)
	at Retrieve.main(Retrieve.java:39)
Exception in thread "main"


Das Programm läuft also bis zu dieser Zeile: XMLResource res = (XMLResource)col.getResource("Schacht");


Ich hab schon mehrere Varianten für die URI versucht. Aber immer kamen irgendwelche Exceptions.

Dann hab ich den Server mal als eigenständiges Programm installiert. Leider mit dem selben Ergebnis.

Mit dem Exist Admin Client kann ich wunderbar Querys auf meine Daten loslassen. Funktioniert so wie es soll.
Aber von Eclipse aus geht's einfach nicht.

Habt Ihr ein paar Tipps für mich? Ich verbringe schon viel zu viel Zeit mit diesem Problem.

Danke,
Barthi
 
R

Roar

Gast
deine xml datei ist fehlerhaft, ich tipp mal dadraut dass du den </meta> end tag vergessen hast.
mich würd interessieren was das fürn cooler parser ist der so schöne fehlermeldungen wirft :?:
 

Barthi

Mitglied
Wow, hier wird ja super schnell geantwortet!! :toll:

Also, die XML-Datei sieht folgendermaßen aus:

Code:
<Schacht id="1">
	<Nummer>M21222</Nummer>
	<Strasse>Kirchplatz</Strasse>
	<Kanal_ID>1</Kanal_ID>
	<Tiefe>
		<Auslauf>2.08</Auslauf>
		<Zulauf1>1.18</Zulauf1>
	</Tiefe>
	<DN>1000</DN>
	<Abdeck_ID>1</Abdeck_ID>
	<Schmutzfaenger>schwer</Schmutzfaenger>
	<Steigeisen>E1211</Steigeisen>
	<Ausgleichsringe>
		<Ausgleichsring>
			<Hoehe>40</Hoehe>
		</Ausgleichsring>
		<Ausgleichsring>
			<Hoehe>60</Hoehe>
		</Ausgleichsring>
		<Ausgleichsring>
			<Hoehe>60</Hoehe>
		</Ausgleichsring>
	</Ausgleichsringe>
	<Schachthals>
		<Hoehe>60</Hoehe>
		<Werkstoff>Stahlbeton</Werkstoff>
	</Schachthals>
	<Schachtringe>
		<Schachtring>
			<Groesse>H1000mm</Groesse>
			<Werkstoff>Stahlbeton</Werkstoff>
		</Schachtring>
	</Schachtringe>
	<Schachtunterteile>
		<Wand>
			<Werkstoff>Stahlbeton</Werkstoff>
			<Form>rund</Form>
		</Wand>
		<Bankett>
			<Werkstoff>Beton</Werkstoff>
			<Hoehe>1/1</Hoehe>
		</Bankett>
		<Gerinne>
			<Werkstoff>AZ</Werkstoff>
		</Gerinne>
	</Schachtunterteile>
	<Zulaeufe>
		<Zulauf_ID>1</Zulauf_ID>
	</Zulaeufe>
	<Auslaeufe>
		<Auslauf_ID>1</Auslauf_ID>
	</Auslaeufe>
	<Schaeden>
		<Schaden_ID>1</Schaden_ID>
		<Schaden_ID>2</Schaden_ID>
		<Schaden_ID>3</Schaden_ID>
	</Schaeden>
</Schacht>


Ich kann mir eigentlich nicht vorstellen, dass sie fehlerhaft ist, da ich sie ja, wie gesagt, mit dem Admin Tool und XQuery abfragen kann.
 
R

Roar

Gast
nee da muss nen fehler in ner anderen datei sein. hast du ne html datei oder so die von irgendwem geparst wird?
ich kenn die api da nicht und weiß nich was da sonst noch so gemacht wird :?
 

Barthi

Mitglied
Ich weiß leider auch nicht mehr. Hab Exist noch nie benutzt.

Vielleicht ist es auch einfach die falsche Methode. Aber die kommt aus der Doku und müsste auch für diesen Zweck verwendet werden können.

Naja, vielleicht findet sich ja noch ein Insider :wink:


Bis dann,
 

Bleiglanz

Gesperrter Benutzer
ist dir noch nicht aufgefallen, dass da irgendwie ein html-Dokument geparst wird, das nichts mit deiner Datei zu tun hat??

falscher name für die DB oder die Ressource??
 

ExElNeT

Mitglied
Roar hat gesagt.:
deine xml datei ist fehlerhaft, ich tipp mal dadraut dass du den </meta> end tag vergessen hast.
mich würd interessieren was das fürn cooler parser ist der so schöne fehlermeldungen wirft :?:

wenn du ein xml dokument mit dom anhand einer dtd validierst bekommst du solche fehlerausgaben.
 
S

stev.glasow

Gast
@Barthi: Wollte deine Signatur editieren dabei ist mir ein Missgeschick passiert, jetzt heißt du auch stevg :roll:
Kannst dich bitte noch mal anmelden, Tschuldigung.
[edit]
So wieder alles in Ordnung, brauchst dich nicht neu Anmelden.
 
G

Guest

Gast
also, ich validieren nichts und ich parse auch keine HTML und transformiere auch nicht mit XSLT oder so.

Das muss also eine Exist-Sache sein.

Die DB-Uri müsste auch stimmen, weil er ja beim debuggen bis zur stelle getResource kommt. D.h. das getCollection scheint zu funktionieren.
 

Barthi

Mitglied
Hi!

Ich hab den Zugriff jetzt hinbekommen. Die Datenbank läuft.

Ich hab jetzt aber das Problem, das ich nicht weiß, wie ich an die NodeValues komme.
Zunächst folgender Code:

Code:
import javax.xml.transform.OutputKeys;
import org.exist.storage.serializers.EXistOutputKeys;
import org.exist.xmldb.EXistResource;
import org.exist.xquery.functions.xmldb.XMLDBCollection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.Resource;
import org.xmldb.api.base.ResourceIterator;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.modules.XMLResource;
import org.xmldb.api.modules.XPathQueryService;

public class Test {

	protected static String driver = "org.exist.xmldb.DatabaseImpl";

	protected static String URI = "xmldb:exist://christians.homedns.org:8080/exist/xmlrpc/db/";
	
	public static void main(String args[]) throws Exception {
		
		String sCollection = "schaechte";


		// initialize database drivers
		Class cl = Class.forName(driver);
		Database database = (Database) cl.newInstance();
		database.setProperty("create-database", "true");
		DatabaseManager.registerDatabase(database);
		
        
		// get the collection
		Collection coll = DatabaseManager.getCollection(URI+sCollection,"admin","");
		
		
		coll.setProperty(OutputKeys.INDENT, "yes");
		coll.setProperty(EXistOutputKeys.EXPAND_XINCLUDES, "no");
		coll.setProperty(EXistOutputKeys.PROCESS_XSL_PI, "yes");
		
		//get Resource
		XMLResource res = (XMLResource)coll.getResource("zulauf2.xml");
		
		if(res == null)
			System.out.println("document not found!");
		else {
			System.out.println(res.getContent());
			System.out.println("Size: " + ((EXistResource)res).getContentLength());
		}
		
		Element el = (Element) res.getContentAsDOM();
		System.err.println("ID: "+el.getAttribute("id"));
		NodeList nl = el.getElementsByTagName("Profilart");
		Element el1 = (Element)nl.item(0);
		System.err.println("Value: "+el1.getNodeValue());

Ich stelle hier eine Verbindung zur Datenbank her und hole mir die Collection "schaechte". Von der hole ich mir dann das XML "zulauf2.xml".
Davon möchte ich mir gerne die "Profilart" ausgeben lassen. Aber er gibt mir immer nur "null" aus. Wenn ich el1.getNodeName() mache, dann bekomme ich "Profilart". Wenn ich el1.toString() mache, dann bekomme ich <Profilart>rund</Profilart>.

Aber ich möchte nur "rund" auf der Console ausgeben. Das muss doch irgendwie gehen.

Könnt ihr mir helfen??
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAX-WS Bindin-Probleme XML & JSON 1
B Probleme mit RelativeLayout XML & JSON 1
L Jackson JSON: Probleme beim einlesen XML & JSON 1
K XOM Builder Probleme XML & JSON 3
N Jsoup: PHP-Tags bereiten Probleme? XML & JSON 2
M SAX-Parsing Probleme XML & JSON 23
M Probleme mit XPath bei Java XML & JSON 5
hdi Probleme beim Erstellen einer XML XML & JSON 7
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
H JAXB Probleme beim Unmarshalling XML & JSON 3
G Probleme mit XML und JTree XML & JSON 9
klattiator Probleme mit Codierung XML & JSON 3
S Probleme beim erstellen einer Jar XML & JSON 12
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
G Probleme mit Namespaces XML & JSON 5
D Probleme mit Eclipse Modeling Framework (EMF) XML & JSON 2
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
C SAX Probleme beim lesen XML & JSON 4
F JAXB - Nachträglich hinzugefügter Code macht Probleme XML & JSON 2
D Probleme beim SAX parsing XML & JSON 4
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
F Unmarshall Probleme XML & JSON 5
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
R Probleme mit Transformer und StreamResult XML & JSON 4
C Probleme mit Include XML & JSON 10
C POI + jXLS Probleme XML & JSON 3
B DOM DTD laden abschalten, Probleme mit Doctypes und PIs XML & JSON 2
S Probleme mit Jdom XML & JSON 3
G probleme mit package XML & JSON 12
M Probleme mit String XML & JSON 3
H Probleme mit xmlrpc und php XML & JSON 13
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3
P Probleme mit jdom XML & JSON 5
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
MAGI XML Server Zugriff XML & JSON 1
R Zugriff auf Inhalt eines Elements XML & JSON 2
O XML Zugriff auf Entity File XML & JSON 0
P Xpath zugriff auf Attribute XML & JSON 3
F Zugriff auf durch JAXB erzeugte Object-Struktur... XML & JSON 6
R eXist Datenbank --> Servlet-Zugriff Treiber? XML & JSON 6
P zugriff auf gewuenschte elemente klapp nicht. XML & JSON 3
J Zugriff auf Web Service über den Browser XML & JSON 12
A XML Attributte Zugriff XML & JSON 5

Ähnliche Java Themen

Neue Themen


Oben