Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment faire fonctionner les accès XML/DOM dans une applet ?

3 réponses
Avatar
Aragorn
Salut !

J'ai écrit une applet Java qui affiche un graphique. Les données de ce graphique
sont extraites d'un fichier dont le nom est donné en paramètre à l'applet :

<applet code="PlotterApplet.class">
<param name="DataFile" value="monFichierDeDonnees"/>
</applet>

J'ai deux versions de l'applet, chacune des deux étant capable d'interpréter
deux formats de fichiers de données. L'un de ces formats est XML. Pour cela je
fais:

...
DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();
df.setValidating( false );
DocumentBuilder db = df.newDocumentBuilder();
URL url = new URL( getDocumentBase(), filename ); // filename étant le nom du
fichier
InputStream is = url.openStream(); // aucun problème à l'ouverture
Document doc = db.parse( is ); // là ça plante !
is.close();
Element root = doc.getDocumentElement();
//...etc et je traite les données...
...

Mais la méthode "parse()" génère une exception :
java.security.AccessControlException: access denied
(java.util.PropertyPermission entityExpansionLimit read)

Or, ça se passe très bien dans l'autre version de l'applet, quand le fichier de
données n'est pas un fichier XML et qu'il est traité "à la main" simplement
comme un fichier texte :

...
URL url = new URL( getDocumentBase(), filename ); // filename étant le nom du
fichier
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br new BufferedReader(isr);
String line = br.readLine(); // là ça NE plante PAS
//...etc et je traite les données...
...

Ce qui m'échappe, c'est pourquoi la sécurité m'empêche de lire le fichier dans
un cas et pas dans l'autre ?
(je précise que j'ai ce problème avec IE 6.0 sous XP)

Merci de m'aider à résoudre ce problème pour le moins étrange...

3 réponses

Avatar
jerome moliere
Aragorn wrote:
Salut !

J'ai écrit une applet Java qui affiche un graphique. Les données de ce graphique
sont extraites d'un fichier dont le nom est donné en paramètre à l'applet :

<applet code="PlotterApplet.class">
<param name="DataFile" value="monFichierDeDonnees"/>
</applet>

J'ai deux versions de l'applet, chacune des deux étant capable d'interpréter
deux formats de fichiers de données. L'un de ces formats est XML. Pour cela je
fais:

...
DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();
df.setValidating( false );
DocumentBuilder db = df.newDocumentBuilder();
URL url = new URL( getDocumentBase(), filename ); // filename étant le nom du
fichier
InputStream is = url.openStream(); // aucun problème à l'ouverture
Document doc = db.parse( is ); // là ça plante !
is.close();
Element root = doc.getDocumentElement();
//...etc et je traite les données...
...

Mais la méthode "parse()" génère une exception :
java.security.AccessControlException: access denied
(java.util.PropertyPermission entityExpansionLimit read)

Or, ça se passe très bien dans l'autre version de l'applet, quand le fichier de
données n'est pas un fichier XML et qu'il est traité "à la main" simplement
comme un fichier texte :

...
URL url = new URL( getDocumentBase(), filename ); // filename étant le nom du
fichier
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br new BufferedReader(isr);
String line = br.readLine(); // là ça NE plante PAS
//...etc et je traite les données...
...

Ce qui m'échappe, c'est pourquoi la sécurité m'empêche de lire le fichier dans
un cas et pas dans l'autre ?
(je précise que j'ai ce problème avec IE 6.0 sous XP)



car dans un cas tu utilises une ressource placée sur le serveur dont
l'applet est issue (conforme avec la sandbox regissant ton applet) dans
l'autre j'imagine que ton document xml est soumis a un DTD non?
place de preference sur un autre site (disons sun.com) et là KO vis a
vis des contraintes de ton applet...
Merci de m'aider à résoudre ce problème pour le moins étrange...
etrange je ne sais pas, logique oui et interessant aussi :)


jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
Aragorn
car dans un cas tu utilises une ressource placée sur le serveur dont
l'applet est issue (conforme avec la sandbox regissant ton applet) dans
l'autre j'imagine que ton document xml est soumis a un DTD non?
place de preference sur un autre site (disons sun.com) et là KO vis a
vis des contraintes de ton applet...


Ben non. Ni DTD, ni schéma, ni feuille de style :

<?xml version="1.0" encoding="ISO-8859-1"?>
<graph version="1.0">
<xrange>10.000000,145.000000</xrange>
<yrange>45.000000,50.000000</yrange>
<step>10,10</step>
<curve type="line" color="green">
<point>10.000000,48.078999</point>
[...]
<point>145.000000,47.805000</point>
</curve>
<curve type="discrete" color="red">
<point>11.000000,45.782001</point>
[...]
<point>12.500000,46.386002</point>
</curve>
</graph>

etrange je ne sais pas, logique oui et interessant aussi :)


Pas si logique que çà... Encore + bizarre : je viens d'essayer toujours avec
IE6.0 mais sous 2000, et là, pas de problème d'accès au fichier, tout se déroule
sans souci et le graphique est affiché !!!!
Manque de bol, il FAUT que ça fonctionne sous XP...

Avatar
ScoobyCed
"Aragorn" a ecrit:
Mais la méthode "parse()" génère une exception :
java.security.AccessControlException: access denied
(java.util.PropertyPermission entityExpansionLimit read)



il s'agit peut etre de la lecture de la propriete entityExpansionLimit :
New system property to limit entity expansion
The entityExpansionLimit system property lets existing applications
constrain the total number of entity expansions without recompiling the
code. The parser throws a fatal error once it has reached the entity
expansion limit. (By default, no limit is set.)
cf: http://java.sun.com/webservices/docs/1.2/jaxp/ReleaseNotes.html

Ced
----