[JAVA] [Solution au problème] SAXReader: Comment lire un fichier xml avec un fichier DTD externe spécifié dans un environnement hors ligne

environnement

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>

Chose que tu veux faire

Je veux lire le fichier xml avec le fichier DTD externe spécifié comme ci-dessous avec ʻorg.dom4j.io.SAXReader`. Cependant, je souhaite le charger dans un environnement hors ligne.

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>

problème

Lorsque j'ai exécuté le code suivant dans un environnement hors ligne, j'ai obtenu une ʻUnknownHostException`.

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)
    ~~~

Cause

La cause est que le fichier dtd spécifié dans la déclaration DOCTYPE ne peut pas être lu. La solution était de ne pas lire le fichier DTD externe.

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");

Site de référence

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

[Solution au problème] SAXReader: Comment lire un fichier xml avec un fichier DTD externe spécifié dans un environnement hors ligne
Comment résoudre les problèmes d'expression en Java
[Rails] Comment créer un environnement avec Docker
[Rails] Comment lire le fichier XML téléchargé depuis l'écran en type Hash
Comment stocker des objets dans PostgreSQL au format JSON avec MyBatis (Mapper XML)
Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git
Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste
Comment créer un fichier jar sans dépendances dans Maven
Comment obtenir la longueur d'un fichier audio avec Java
Comment insérer une bibliothèque externe
`SAXReader`: Obtenez le fichier xml avec l'espace de noms par défaut défini au format XPath
Comment exécuter avec des commandes de langage de développement normales dans l'environnement de développement Docker
Comment lire le fichier de paramètres log4j dans un projet Java assemblé dans un fichier jar Memo
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
Comment recadrer une image avec libGDX
Comment ajouter un fichier jar dans ScalaIDE
Comment réaliser le téléchargement de fichiers avec Feign
Lire le fichier xlsx en Java avec Selenium
Comment utiliser les variables d'environnement dans RubyOnRails
Comment réaliser le téléchargement de fichiers avec Feign
Comment créer un environnement Rails 6 avec Docker
Comment sortir un pot avec la classe principale spécifiée par gradle dans IntellijIDEA
Comment envoyer des métriques et des événements personnalisés à datadog avec laravel dans l'environnement docker-compose
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Vue ~
Comment créer un formulaire Excel à l'aide d'un fichier modèle avec Spring MVC
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot