Permission problem reading local XML file

Posted on 2007-11-28
Medium Priority
Last Modified: 2012-05-05

I am using the following in an applet:

Document doc;
    // Create a builder factory.
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(false); // nah.
    // Create the builder and parse the file.
    doc = factory.newDocumentBuilder().parse(new File("test01.xml"));

The file is test01.xml. I'm sure it exists in the same folder as my applet. When I run the applet, the java console prints out:

Exception in thread "AWT-EventQueue-27" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
      at java.security.AccessControlContext.checkPermission(Unknown Source)
      at java.security.AccessController.checkPermission(Unknown Source)
      at java.lang.SecurityManager.checkPermission(Unknown Source)
      at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
      at java.lang.System.getProperty(Unknown Source)
      at java.io.Win32FileSystem.getUserPath(Unknown Source)
      at java.io.Win32FileSystem.resolve(Unknown Source)
      at java.io.File.getAbsolutePath(Unknown Source)
      at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
      at Gallery.BuildFromXML(Gallery.java:41)
      at MarkGallery.renderInit(MarkGallery.java:45)
      at MarkGallery.render(MarkGallery.java:35)
      at BufferedApplet.update(BufferedApplet.java:57)
      at sun.awt.RepaintArea.updateComponent(Unknown Source)
      at sun.awt.RepaintArea.paint(Unknown Source)
      at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
      at java.awt.Component.dispatchEventImpl(Unknown Source)
      at java.awt.Container.dispatchEventImpl(Unknown Source)
      at java.awt.Component.dispatchEvent(Unknown Source)
      at java.awt.EventQueue.dispatchEvent(Unknown Source)
      at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
      at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
      at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
      at java.awt.EventDispatchThread.run(Unknown Source)

The same exact code works fine from a 'comman line' java application, reading text01.xml locally in the same folder. Any idea what I did wrong?

Question by:DJ_AM_Juicebox
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 3
LVL 92

Expert Comment

ID: 20371631
applets run inside a security sandbox which prevents access to the local disk
you need to sign the applet to access local disk
LVL 92

Expert Comment

ID: 20371635
Or you could put the xml on the server and load it from there

LVL 92

Expert Comment

ID: 20371645

    doc = factory.newDocumentBuilder().parse(getClass().getResourceAsStream("test01.xml"));


    URL xml = new URL(applet.getCodeBase(), "test01.xml");
    doc = factory.newDocumentBuilder().parse(xml.toString());
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 20371665
yeah it is running from the local server, in this case it happens to be the local directory of my desktop folder:

desktop/my_progject/index.html    // contains the applet
desktop/my_project/test01.xml   // the xml file
desktop/my_project/theapp.class  // the compiled java class file

so I'm just running it locally. I've done this plenty of times with bitmaps etc (this even worked via the command line version of the XML reader) but for some reason it doesn't like running the applet locally!

Author Comment

ID: 20371674
Hmm switching to:

doc = factory.newDocumentBuilder().parse(getClass().getResourceAsStream("test01.xml"));

seemed to work.


LVL 92

Expert Comment

ID: 20371675
doesn't matter that you're running locally, sandbox still applies.
The code you are using attempt to access local disk which an unsigned applet is not permitted to do.


Author Comment

ID: 20371679
ahh before I leave this question - once I upload all this stuff and run it from my server (the XML file will also be sitting locally on the server in the same folder as the applet) the:


should still be valid right?

LVL 92

Expert Comment

ID: 20371681
> Crazy!

not really, now you're reading it from the server instead of local disk.
(In your case they just happen to be the same place)

following covers signing applets if you need to go down that route.

LVL 92

Accepted Solution

objects earned 2000 total points
ID: 20371693
> should still be valid right?


Featured Post

Get real performance insights from real users

Key features:
- Total Pages Views and Load times
- Top Pages Viewed and Load Times
- Real Time Site Page Build Performance
- Users’ Browser and Platform Performance
- Geographic User Breakdown
- And more

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Suggested Courses
Course of the Month14 days, 8 hours left to enroll

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question