Search code examples
javaxmljaxbdtdunmarshalling

Error while unmarshal an XML with JAXB caused by DTD file


I try to unmarhshal a file XML file (test.xml) with JAXB (javax.xml.bind.JAXB) but it gives me this error:

[org.xml.sax.SAXParseException; systemId: file:/C:/Users/EXAMPLE/AppData/Local/Eclipse/workspace_4.4.0/EXAMPLE/test.xml; lineNumber: 2; columnNumber: 42; Externe DTD: Lesen von externer DTD "example.dtd" nicht erfolgreich, da "file"-Zugriff wegen der von der Eigenschaft "accessExternalDTD" festgelegten Einschränkung nicht zulässig ist.]

English Translation:

Reading from external DTD "example.dtd" not succesful , cause "File"-Access is not allowed by the Restriction set by the Properties "accessExternalDTD"

Solutions already tried:

  • Checked if all users including system has access to R/W both files.
  • Deleted and used new files to test.
  • Tried To find this accessExternalDTD properties.

Stuff to notice:

  • Project is running in Subversion
  • I used the same method on previous projects and the same .dtd and .xml file and it worked well
  • Content of the LINE 2 From the XML File: <!DOCTYPE EXAMPLE SYSTEM "example.dtd">

Solution

  • The accessExternalDTD property can be controlled with the system property javax.xml.accessExternalDTD, so start your program with -Djavax.xml.accessExternalDTD=true and it should work. It should also be possible to set the property on the unmarshaller, try this:

    unmarshaller.setProperty(javax.xml.XMLConstants.ACCESS_EXTERNAL_DTD, Boolean.TRUE);