[JAVA] [Problemlösung] SAXReader: Lesen einer XML-Datei mit einer externen DTD-Datei, die in einer Offline-Umgebung angegeben ist

Umgebung

pom.xml


<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1.1</version>
</dependency>

Was du machen willst

Ich möchte die XML-Datei mit der externen DTD-Datei lesen, die wie folgt mit org.dom4j.io.SAXReader angegeben ist. Ich möchte es jedoch in einer Offline-Umgebung laden.

struts-config.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
...
</struts-config>

Problem

Wenn ich den folgenden Code in einer Offline-Umgebung ausgeführt habe, wurde eine "UnknownHostException" angezeigt.

Bad.java


SAXReader reader = new SAXReader();
Document doc = reader.read("struts-config.xml");

Exception


org.dom4j.DocumentException: jakarta.apache.org Nested exception: jakarta.apache.org
	at org.dom4j.io.SAXReader.read(SAXReader.java:484)
	at org.dom4j.io.SAXReader.read(SAXReader.java:321)
	at test2.Test2.main(Test2.java:24)
Nested exception: 
java.net.UnknownHostException: jakarta.apache.org
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    ~~~

Ursache

Die Ursache ist, dass die in der DOCTYPE-Deklaration angegebene dtd-Datei nicht gelesen werden kann. Die Lösung bestand darin, die externe DTD-Datei nicht zu lesen.

Good.java


SAXReader reader = new SAXReader();
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Document doc = reader.read("struts-config.xml");

Referenzseite

https://xerces.apache.org/xerces2-j/features.html http://qiita.com/yoshi389111/items/3d0da72b1f2ccd947052 http://k-motohashi.hatenablog.com/entry/2013/04/24/115413

Recommended Posts

[Problemlösung] SAXReader: Lesen einer XML-Datei mit einer externen DTD-Datei, die in einer Offline-Umgebung angegeben ist
So lösen Sie Ausdrucksprobleme in Java
[Rails] So erstellen Sie eine Umgebung mit Docker
[Rails] Lesen der vom Bildschirm hochgeladenen XML-Datei im Hash-Typ
Speichern von Objekten in PostgreSQL als JSON mit MyBatis (Mapper XML)
Verwendung von git mit der Leistung von jgit in einer Umgebung ohne git-Befehle
Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So ermitteln Sie die Länge einer Audiodatei mit Java
So fügen Sie eine externe Bibliothek ein
`SAXReader`: Ruft die XML-Datei mit dem im XPath-Format festgelegten Standard-Namespace ab
Ausführen mit normalen Befehlen für die Entwicklungssprache in der Docker-Entwicklungsumgebung
Lesen der log4j-Einstellungsdatei in einem Java-Projekt, das in der JAR-Datei Memo zusammengestellt ist
So starten Sie einen Docker-Container mit einem in einer Batchdatei bereitgestellten Volume
So beschneiden Sie ein Bild in libGDX
So fügen Sie eine JAR-Datei in ScalaIDE hinzu
So erreichen Sie den Dateidownload mit Feign
Lesen Sie die xlsx-Datei in Java mit Selenium
Verwendung von Umgebungsvariablen in RubyOnRails
So erreichen Sie das Hochladen von Dateien mit Feign
So erstellen Sie eine Rails 6-Umgebung mit Docker
So geben Sie ein Glas mit der von gradle in IntellijIDEA angegebenen Hauptklasse aus
So senden Sie benutzerdefinierte Metriken und Ereignisse mit Laravel in einer Docker-Compose-Umgebung an Datadog
So erstellen Sie mit Docker ~ Vue ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest