Solved

Permission problem reading local XML file

Posted on 2007-11-28
10
207 Views
Last Modified: 2012-05-05
Hi,

I am using the following in an applet:

Document doc;
try
{
    // 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?

Thanks
0
Comment
Question by:DJ_AM_Juicebox
  • 6
  • 3
10 Comments
 
LVL 92

Expert Comment

by:objects
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
0
 
LVL 92

Expert Comment

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

0
 
LVL 92

Expert Comment

by:objects
ID: 20371645

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

or

    URL xml = new URL(applet.getCodeBase(), "test01.xml");
    doc = factory.newDocumentBuilder().parse(xml.toString());
0
 
LVL 9

Expert Comment

by:ysnky
ID: 20371648
0
 

Author Comment

by:DJ_AM_Juicebox
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!
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:DJ_AM_Juicebox
ID: 20371674
Hmm switching to:

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

seemed to work.

Crazy!

Thanks
0
 
LVL 92

Expert Comment

by:objects
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.

0
 

Author Comment

by:DJ_AM_Juicebox
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:

     parse(getClass().getResourceAsStream("test01.xml"));

should still be valid right?

Thanks
0
 
LVL 92

Expert Comment

by:objects
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.

http://mindprod.com/jgloss/signedapplets.html
0
 
LVL 92

Accepted Solution

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

yes
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
sumDigits  challenge 7 62
powerN  challenge 3 49
java set up 1 48
eclipse compiler vs Installed JREs option 3 42
For customizing the look of your lightweight component and making it look lucid like it was made of glass. Or: how to make your component more Apple-ish ;) This tip assumes your component to be of rectangular shape and completely opaque. (COD…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
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 …

747 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now