Zum Inhalt springen

Doctype bei JAXB


speedi

Empfohlene Beiträge

Hi Leute,

ich habe die Aufgabe einen XML-Reader zu schreiben um Daten in einem bestimmten Format einzulesen. Ich habe aus einer XML-Schema-Definition mit JAXB die Klassenstruktur erzeugt und möchte nun die Daten einlesen.

Das Problem:

In der XML die ich einlesen möchte gibt es eine Zeile:

<!DOCTYPE READER SYSTEM "1.0.1">
Nun bekomme ich eine Fehlermeldung dass die Datei "1.0.1" (DTD-Datei) im Ordner in dem die XML selbst auch liegt nicht vorhanden ist. Ich habe die Datei. Allerdings kann ich sie ja schlecht immer erst in den Ordner kopieren aus dem ich die XML laden will. Weiß jemand wie man dem JAXB sagt, dass er die Doctype-Definition von woanders laden soll? Nochmal die Fehlermeldung:
javax.xml.bind.UnmarshalException

 - with linked exception:

[java.io.FileNotFoundException: C:\Users\Username\workspace\XMLConnector\testfiles\1.0.1 (Das System kann die angegebene Datei nicht finden)]

	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202)

	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)

	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)

	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)

	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)

	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)

	at Test.main(Test.java:14)

Caused by: java.io.FileNotFoundException: C:\Users\Username\workspace\XMLConnector\testfiles\1.1.2 (Das System kann die angegebene Datei nicht finden)

	at java.io.FileInputStream.open(Native Method)

	at java.io.FileInputStream.<init>(FileInputStream.java:120)

	at java.io.FileInputStream.<init>(FileInputStream.java:79)

	at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)

	at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)

	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:653)

	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)

	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1282)

	at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:283)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1194)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)

	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)

	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)

	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)

	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)

	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)

	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)

	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)

	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200)

	... 6 more

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Unicode.

Nein, das hilft mir nicht. Die Dateien die ich einlesen muss zu verändern wäre keine gute Lösung. Es handelt sich um einen Standard den ich eben so implementieren muss wie er definiert ist. An der Dateiendung liegts nicht. Ich habe die Datei (ursprünglich "doctype_1.0.1.dtd") bereits umbenannt zu "1.0.1". Damit funktioniert es auch - sofern die Datei im gleichen Ordner liegt wie die XML-Dateien. Aber das ist eben nicht der Fall. Natürlich könnte man jetzt die Datei dann einfach automatisiert vor dem unmarshalling in den Ordner kopieren - würde funktionieren - aber eine schöne Lösung ist das wirklich nicht. Es muss doch wohl möglich sein, den Unmarshaller irgendwie zu sagen wo er die Doctype-Definition herziehen soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...