Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Doctype bei JAXB

Empfohlene Antworten

Veröffentlicht

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

Und wenn du es mit folgendem probierst:


<!DOCTYPE READER SYSTEM "1.0.1[COLOR="red"].dtd[/COLOR]">

?

Ich glaube, dass er eine Datei sucht, die 1.0 heisst, und die Endung .1 hat ;)

  • Autor

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.