Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4638445

javax.xml.parsers.DocumentBuilder cannot pares InputStream in JApplet

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • None
    • 1.4.1
    • xml
    • x86
    • windows_98

      Name: gm110360 Date: 02/14/2002


      FULL PRODUCT VERSION :
      java version "1.4.0-rc"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b91)
      Java HotSpot(TM) Client VM (build 1.4.0-rc-b91, mixed mode)

      Java(TM) Plug-in: Version 1.4.0
      Using JRE version 1.4.0-rc Java HotSpot(TM) Client VM
        User home directory = C:\WINDOWS
      Proxy Configuration: No proxy

      FULL OPERATING SYSTEM VERSION :Windows 98 [Version
      4.10.2222]



      A DESCRIPTION OF THE PROBLEM :
      I try to read xml data from webpage into JApplet. The xml
      data is avaliable as text file and place at the same
      JApplet directory. The error message is "access denied" by
      java.net.SocketPermission which was called from
      javax.xml.parsers.DocumentBuilder.parse(). I use
      URL.openStream() to open the InputStream. However, the xml
      data can be read by BufferedReader.
      I first found the problem when I used Forte 3.0 with tomcat
      3.2. Then, I try again with JWSDP 1.0 EA1 which released
      with tomcat 4.0.1. It has the same result.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1. Prepare files :
      copy DOMEdit.html, webxml.txt, and DOMEdit.java into same
      directory of web server. Then, compile DOMEdit.java and run
      web server.

      2. Browse DOMEdit.html:
      When the applet start, the messagebox "Reading file ..."
      will be shown. Next messagebox will show data from
      webxml.txt which is read by BufferedRead.

      3. Error:
      After that, the error messagebox will be shown.


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      If there is no problem, the messagebox "Reading file
      complete." will be shown and the tree of xml DOM will be
      drawn.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      java.security.AccessControlException: access denied (java.net.SocketPermission
      java.sun.com resolve)
      at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:524)
      at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
      at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
      at org.apache.crimson.jaxp.DocumentBuilderImpl.parse
      (DocumentBuilderImpl.java:185)
      at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:86)
      at DOMEdit.readFile(DOMEdit.java:97)
      at DOMEdit.init(DOMEdit.java:75)
      at sun.applet.AppletPanel.run(AppletPanel.java:341)
      at java.lang.Thread.run(Thread.java:536)


      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      ================ DOMEdit.java ==============
      /*
       * DOMEdit.java
       *
       * Created on 10 ?????????? 2545, 23:15 ?.
       */
      import java.awt.Dimension;
      import java.awt.Toolkit;
      import java.awt.event.WindowAdapter;
      import java.awt.event.WindowEvent;
      import javax.swing.JFrame;
      import javax.swing.tree.*;
      import java.net.URL;
      import java.io.*;

      import javax.xml.parsers.DocumentBuilder;
      import javax.xml.parsers.DocumentBuilderFactory;
      import javax.xml.parsers.FactoryConfigurationError;
      import javax.xml.parsers.ParserConfigurationException;

      import org.xml.sax.SAXException;
      import org.xml.sax.SAXParseException;
      import org.w3c.dom.Document;
      import org.w3c.dom.DOMException;
      import org.w3c.dom.Element;
      import org.w3c.dom.Node;

      /**
       *
       * @author lsomchai
       */
      public class DOMEdit extends javax.swing.JApplet {
          Document document;
          String url;

          /** Creates new form DOMEdit */
          public DOMEdit() {
              initComponents();
          }

          /** This method is called from within the constructor to
           * initialize the form.
           * WARNING: Do NOT modify this code. The content of this method is
           * always regenerated by the Form Editor.
           */
          private void initComponents() {//GEN-BEGIN:initComponents
              viewPane = new javax.swing.JPanel();
              titleLabel = new javax.swing.JLabel();
              splitPane = new javax.swing.JSplitPane();
              leftScroll = new javax.swing.JScrollPane();
              domTree = new javax.swing.JTree();
              rightScroll = new javax.swing.JScrollPane();
              
              setName("DOMEdit");
              viewPane.setLayout(new java.awt.BorderLayout());
              
              viewPane.setBorder(new javax.swing.border.EmptyBorder(new
      java.awt.Insets(5, 5, 5, 5)));
              titleLabel.setText("jLabel1");
              viewPane.add(titleLabel, java.awt.BorderLayout.NORTH);
              
              leftScroll.setViewportView(domTree);
              
              splitPane.setLeftComponent(leftScroll);
              
              splitPane.setRightComponent(rightScroll);
              
              viewPane.add(splitPane, java.awt.BorderLayout.CENTER);
              
              getContentPane().add(viewPane, java.awt.BorderLayout.CENTER);
              
          }//GEN-END:initComponents

          public void init() {
              URL cb = getCodeBase();
              readFile();
          }

          private void readFile() {
              DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
              //factory.setValidating(true);
              //factory.setNamespaceAware(true);
              try {
                  javax.swing.JOptionPane.showMessageDialog(this,"Reading file...");
                  URL tc = new URL(getCodeBase(),"webxml.txt");
                  URL ac = new URL(getCodeBase(),"webxml.txt");
                  titleLabel.setText(ac.toString());
                  InputStream tin = tc.openStream();
                  InputStream in = ac.openStream();
                  BufferedReader reader = new BufferedReader(new InputStreamReader
      (tin));
                  String text="",buffer;
                  while ((buffer = reader.readLine()) != null) {
                      text += buffer;
                  }
                  javax.swing.JOptionPane.showMessageDialog(this,text);
                  tin.close();
                  DocumentBuilder builder = factory.newDocumentBuilder();
                  document = builder.parse(in);
                  domTree.setModel(new DefaultTreeModel(new DOMNodeAdapter
      (document)));
                  //domTree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode
      ("Test")));
                  //domTree.setCellRenderer(new DOMTreeCellRenderer());
                  javax.swing.JOptionPane.showMessageDialog(this,"Reading file
      complete.");
                  in.close();
              } catch (Exception e) {
                 // Error generated during parsing)
                 e.printStackTrace();
                  javax.swing.JOptionPane.showMessageDialog(this,e.toString());
              }
          }

          public static void main(String[] argv) {
              JFrame frame = new JFrame("DOMEdit");
              frame.addWindowListener(
                new WindowAdapter() {
                  public void windowClosing(WindowEvent e) {System.exit(0);}
                }
              );
              DOMEdit edit = new DOMEdit();
              edit.url = "http://vslwin:8080/webxml.txt";
              edit.readFile();
              frame.getContentPane().add(edit);
              frame.pack();
              Dimension screenSize =
                 Toolkit.getDefaultToolkit().getScreenSize();
              int w = 500 + 10;
              int h = 350 + 10;
              frame.setLocation(screenSize.width/3 - w/2,
                                screenSize.height/2 - h/2);
              frame.setSize(w, h);
              frame.setVisible(true);
          }
         
          public class DOMTreeCellRenderer extends
      javax.swing.tree.DefaultTreeCellRenderer {
              
              public java.awt.Component getTreeCellRendererComponent
      (javax.swing.JTree tree, java.lang.Object obj, boolean sel, boolean expanded,
      boolean leaf, int row, boolean hasfocus) {
                  return tree;
              }
              
          }
          
          public class DOMNodeAdapter implements javax.swing.tree.TreeNode,
      javax.swing.tree.MutableTreeNode {
              org.w3c.dom.Node domNode;
              
              public DOMNodeAdapter(org.w3c.dom.Node node) {
                  domNode = node;
              }
              
              public boolean getAllowsChildren() {
                  return true;
              }
              
              public String toString() {
                  switch (domNode.getNodeType()) {
                      case Node.ATTRIBUTE_NODE : return "ATTRIBUTE";
                      case Node.CDATA_SECTION_NODE : return "CDATA_SECTION";
                      case Node.COMMENT_NODE : return "COMMENT";
                      case Node.DOCUMENT_FRAGMENT_NODE : return "DOCUMENT_FRAGMENT";
                      case Node.DOCUMENT_NODE : return "DOCUMENT";
                      case Node.DOCUMENT_TYPE_NODE : return "DOCUMENT_TYPE";
                      case Node.ELEMENT_NODE : return "ELEMENT";
                      case Node.ENTITY_NODE : return "ENTITY";
                      case Node.ENTITY_REFERENCE_NODE : return "ENTITY_REFERENCE";
                      case Node.NOTATION_NODE : return "NOTATION";
                      case Node.PROCESSING_INSTRUCTION_NODE :
      return "PROCESSING_INSTRUCTION";
                      case Node.TEXT_NODE : return "TEXT";
                  }
                  return "UNKNOWN";
              }
              
              public java.util.Enumeration children() {
                  int count = getChildCount();
                  java.util.Vector list = new java.util.Vector();
                  for (int i=0; i<count; i++) list.add(getChildAt(i));
                  return list.elements();
              }
              
              public javax.swing.tree.TreeNode getChildAt(int param) {
                  return new DOMNodeAdapter(domNode.getChildNodes().item(param));
              }
              
              public int getIndex(javax.swing.tree.TreeNode treeNode) {
                  DOMNodeAdapter node = (DOMNodeAdapter)treeNode;
                  DOMNodeAdapter parent = (DOMNodeAdapter)node.getParent();
                  int count = parent.getChildCount();
                  for (int i=0; i<count; i++) {
                      DOMNodeAdapter child = (DOMNodeAdapter)parent.getChildAt(i);
                      if (node.domNode == child.domNode) return i;
                  }
                  return -1; // Should never get here.
              }
              
              public int getChildCount() {
                  int count = 0;
                  for (int i=0; i<domNode.getChildNodes().getLength(); i++) {
                      org.w3c.dom.Node child = domNode.getChildNodes().item(i);
                      //if (child.getNodeType() == Node.ELEMENT_NODE)
                          ++count;
                  }
                  return count;
              }
              
              public boolean isLeaf() {
                  if (getChildCount() > 0) return false;
                  return true;
              }
              
              public javax.swing.tree.TreeNode getParent() {
                  return new DOMNodeAdapter(domNode.getParentNode());
              }
              
              public void setUserObject(java.lang.Object obj) {
              }
              
              public void remove(javax.swing.tree.MutableTreeNode mutableTreeNode) {
              }
              
              public void removeFromParent() {
              }
              
              public void setParent(javax.swing.tree.MutableTreeNode mutableTreeNode)
      {
              }
              
              public void remove(int param) {
              }
              
              public void insert(javax.swing.tree.MutableTreeNode mutableTreeNode,
      int param) {
              }
          }
          
          // Variables declaration - do not modify//GEN-BEGIN:variables
          private javax.swing.JPanel viewPane;
          private javax.swing.JLabel titleLabel;
          private javax.swing.JSplitPane splitPane;
          private javax.swing.JScrollPane leftScroll;
          private javax.swing.JTree domTree;
          private javax.swing.JScrollPane rightScroll;
          // End of variables declaration//GEN-END:variables

      }
      ================ DOMEdit.java ==============

      ================ DOMEdit.html ==============
      <HTML>
      <HEAD>
         <TITLE>Applet HTML Page</TITLE>
      </HEAD>
      <BODY>

      <H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>

      <P>
      <APPLET code="DOMEdit.class" width=350 height=200></APPLET>
      </P>

      <HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
      </BODY>
      </HTML>
      ================ DOMEdit.html ==============

      ================ webxml.txt ================
      <?xml version="1.0" encoding="UTF-8"?>
      <!--
                      Sun Public License Notice

      The contents of this file are subject to the Sun Public License
      Version 1.0 (the "License"). You may not use this file except in
      compliance with the License. A copy of the License is available at
      http://www.sun.com/

      The Original Code is NetBeans. The Initial Developer of the Original
      Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
      Microsystems, Inc. All Rights Reserved.
      -->


      <!DOCTYPE web-app
          PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
          "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

      <web-app>
        <servlet>
          <servlet-name>Servlet_AppContext</servlet-name>
          <display-name>Servlet AppContext</display-name>
          <description>Default configuration created for servlet.</description>
          <servlet-class>AppContext</servlet-class>
          <load-on-startup>99</load-on-startup>
        </servlet>
        <servlet-mapping>
          <servlet-name>Servlet_AppContext</servlet-name>
          <url-pattern>webxml.txt</url-pattern>
        </servlet-mapping>
        <session-config>
          <session-timeout>
                  30
              </session-timeout>
        </session-config>
        <welcome-file-list>
          <welcome-file>
                  index.jsp
              </welcome-file>
          <welcome-file>
                  index.html
              </welcome-file>
          <welcome-file>
                  index.htm
              </welcome-file>
        </welcome-file-list>
      </web-app>
      ================ webxml.txt ================

      ---------- END SOURCE ----------
      (Review ID: 139522)
      ======================================================================
      ###@###.### 2002-12-27

            gsharmasunw Gopal Sharma (Inactive)
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: