# Applet wirft AccessControlException bei File von Servlet



## HarryG32 (6. Nov 2012)

Hallo,

ich hole mir in einem Applet ein XML-File über ein Servlet von einem Server.

Appelt und Servlet sowie die XML-Files liegen im selben Verzeichnis (Webprojekt)auf dem Server.

Das XML-File soll auf Appletseite geparst und der Inhalt in einem Objekt-Modell abspeichert werden.

Doch beim Parsen gibt es einen Fehler:

document = builder.parse(file);  //Hier sollte er aus dem File ein XML-Document erzeugt werden...

Fehler beim Parsen: java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read) 

Wie kann es sein, dass ich so einen Fehler bekomme, wenn ich das File vom Server hole (und nicht lokal)?

Wird das File lokal abgespeichert vor dem Parsen?? 

btw:
Habe gerade gelesen, dass das Applet über die Klasse URL eine Ressource vom eigenen Server direkt lesen kann (ohne Servlet). Und dass man damit die Ressource auch auslesen kann mittels Stream. Diesen werde ich anstatt des Files verwenden und den DocumentBuilder damit füttern. Trotzdem würde es mich noch interessieren warum es mit dem File nicht geklappt hat??


----------



## nillehammer (6. Nov 2012)

Weil Du 1. bei unsignierten Applets nicht auf dem Filesystem des Clients rumfuddeln darfst und Du 2. überhaupt nicht mit einem File arbeitest, sondern mit einem InputStream. Aus Sicht des Applet-codes holst Du Dir das XML ja nicht von einem lokalen Filesystem sondern über Netzwerk als Response auf einen Request. Das ist ein gewaltiger Unterschied.


----------



## HarryG32 (6. Nov 2012)

1. Ich kenne die Restriktionen eines Applets, hat mir schon einiges an Nerven gekostet, da man ned direkt mit Files arbeiten darf, auch ned wenn sie vom Applet erzeugt werden und dann an das Servlet geschickt werden sollen...sobald sie lokal zwischengespeichert werden müssen, bekommt man eine Exception beim lesen....ich wollte ja auch nirgends "rumfuddeln" aber anscheinend lässt sich ein File "onthefly" (ohne Speicherung auf dem Filesystem) nicht verschicken....aber man kann ja den Stream nehmen, der in ein File schreiben soll....was ich auch gemacht habe....somit hab ich mir auch einen Schritt erspart....

2. Jetzt arbeite ich mit einem InputStream und den kann ich jetzt auch fehlerfrei parsen, was mich nach der bisherigen Rückschläge mit Applet-Restriktionen, Servlet-Eigenheiten und Tomcat-Faxen echt freut...puhh, das Zeugs is gewöhnungsbedürftig und die Stunden verfliegen wenn man versucht einen Fehler zu beheben....



> Aus Sicht des Applet-codes holst Du Dir das XML ja nicht von einem lokalen Filesystem sondern über Netzwerk



Das sieht das Applet aber trotzdem anders, denn es hat mit einem File vom Server ned funktioniert. Vom eigenen Server darf ich ja lesen und das mach ich (mittlerweile) sogar ohne Servlet....direkt über URL lasse ich die Ressource per InputStream einlesen....anscheinend is die File-Klasse bei Applets komplett ungeeignet beim Filetransfer bzw. is mir das Konzept dahinter anscheinend ned ganz klar...oder mir geht gerade ein Licht auf, da ich's ja mit Streams supa realisieren konnte...


----------



## nillehammer (6. Nov 2012)

> File-Klasse bei Applets komplett ungeeignet beim Filetransfer bzw. is mir das Konzept dahinter anscheinend ned ganz klar


_File_ ist nur für Zugriffe auf das *lokale* Filesystem. Z.B. Bei Windows sind das alle Dateien/Verzeichnise, die Du unter irgendeinem Laufwerksbuchstaben findest. Auch wenn du eine _Datei_ per http von Deinem Server holst, hat das nichts mit der Java-Klasse _File_ zu tun. Also merke, wenn Du es mit dem Dateiexplorer (nicht dem IE) von Windows siehst, kannste es in Java mit File bearbeiten, sonst nicht.


----------

