You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@xml.apache.org by Ilian Alekov <ia...@tlogica.com> on 2001/06/27 16:13:12 UTC

crimson 1.1 parser problem!

Hello!
I need to use the crimson parser in order to parse a SVG document from a
file, so I can produce a buffered image then.
Unfortunately, I have diffiulties.
I get a java.lang.SecurityException when executing my program.

I will apriciate any help!

Best regards,
Ilian Alekov.

my code:
package package3;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
//import org.xml.sax.Parser;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

import java.io.*;
import java.net.URL;

import org.apache.batik.bridge.UserAgent;

import org.w3c.dom.svg.*;
import org.w3c.dom.Document;
import org.w3c.dom.DOMImplementation;
import java.awt.geom.Dimension2D;
import java.awt.geom.AffineTransform;

import org.apache.batik.gvt.event.EventDispatcher;

import org.apache.batik.bridge.*;

import org.apache.batik.gvt.GraphicsNodeRenderContext;
import org.apache.batik.gvt.renderer.StaticRendererFactory;
import org.apache.batik.gvt.GraphicsNode;
import org.apache.batik.gvt.renderer.*;


//import oracle.xml.parser.v2.*;
import org.apache.crimson.parser.*;

import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.dom.GenericDOMImplementation;




//import org.w3c.dom.Document;
//import org.w3c.dom.Element;


/**
 * A Swing-based top level window class.
 * <P>
 * @author Ilian Alekov
 */
public class MyFrame extends JFrame {
  BorderLayout borderLayout1 = new BorderLayout();
//  JPanel jPanel1 = new JPanel();
  MyCanvas myCanvas = new MyCanvas();
  JMenuBar jMenuBar1 = new JMenuBar();
  JMenu jMenu1 = new JMenu();
  JMenuItem jMenuItem1 = new JMenuItem();
  JMenuItem jMenuItem2 = new JMenuItem();
  URL myURL;
  private Graphics2D graphics = null;
  /**
   * Constructs a new instance.
   */
  public MyFrame() {
    super();
    try  {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Initializes the state of this instance.
   */
  private void jbInit() throws Exception {
    this.getContentPane().setLayout(borderLayout1);
    this.setSize(new Dimension(400, 300));
    jMenu1.setText("File");
    jMenuItem1.setText("Open");
    jMenuItem1.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jMenuItem1_actionPerformed(e);
      }
    });
    jMenuItem2.setText("Exit");
    this.getContentPane().add(myCanvas, BorderLayout.CENTER);
    jMenuBar1.add(jMenu1);
    jMenu1.add(jMenuItem1);
    jMenu1.add(jMenuItem2);
    this.setJMenuBar(jMenuBar1);
  }

protected class MUserAgent implements UserAgent {
        AffineTransform currentTransform = null;
        /**
         * Creates a new SVGUserAgent.
         */
        protected MUserAgent(AffineTransform at) {
            currentTransform = at;
        }

        /**
         * Displays an error message.
         */
        public void displayError(String message) {
            System.err.println(message);
        }

        /**
         * Displays an error resulting from the specified Exception.
         */
        public void displayError(Exception ex) {
            ex.printStackTrace(System.err);
        }

        /**
         * Displays a message in the User Agent interface.
         * The given message is typically displayed in a status bar.
         */
        public void displayMessage(String message) {
            System.out.println(message);
        }

        /**
         * Returns a customized the pixel to mm factor.
         */
        public float getPixelToMM() {
            return 0.264583333333333333333f; // 72 dpi
        }

        /**
         * Returns the language settings.
         */
        public String getLanguages() {
            return "en";//userLanguages;
        }

        /**
         * Returns the user stylesheet uri.
         * @return null if no user style sheet was specified.
         */
        public String getUserStyleSheetURI() {
            return null;//userStyleSheetURI;
        }

        /**
         * Returns the class name of the XML parser.
         */
        public String getXMLParserClassName() {
            String parserClassName =
System.getProperty("org.xml.sax.parser");
            if (parserClassName == null) {
                parserClassName = "org.apache.xerces.parsers.SAXParser";
            }
            return
parserClassName;//application.getXMLParserClassName();
        }

        /**
         * Opens a link in a new component.
         * @param doc The current document.
         * @param uri The document URI.
         */
        public void openLink(SVGAElement elt) {
            //application.openLink(uri);
        }

        public Point getClientAreaLocationOnScreen() {
            return new Point(0, 0);
        }

        public void setSVGCursor(java.awt.Cursor cursor) {
        }

        public AffineTransform getTransform() {
            return currentTransform;
        }

        public Dimension2D getViewportSize() {
            return new Dimension(100, 100);
        }

        public EventDispatcher getEventDispatcher() {
            return null;
        }

        public boolean supportExtension(String str) {
            return false;
        }

        public boolean hasFeature(String str) {
            return false;
        }

        public void registerExtension(BridgeExtension be) {
        }
    }

    protected void renderSVGDocument(Document doc, int x, int y) {
        UserAgent userAgent = new MUserAgent(new AffineTransform());

        GVTBuilder builder = new GVTBuilder();
        GraphicsNodeRenderContext rc = (new
StaticRendererFactory()).getRenderContext();
        BridgeContext ctx = new BridgeContext(userAgent, rc);
        GraphicsNode root;
        graphics.translate(200, 100);
        graphics.setRenderingHints(rc.getRenderingHints());
        root = builder.build(ctx, doc);
        root.paint(graphics, rc);
        graphics.translate(-200, -100);
    }

  void jMenuItem1_actionPerformed(ActionEvent e) {
  BufferedImage myBImage = new
BufferedImage(150,150,BufferedImage.TYPE_INT_ARGB);
   JFileChooser fc = new JFileChooser("c:\\.");

   int choice = fc.showOpenDialog(myCanvas);
   if (choice == JFileChooser.APPROVE_OPTION)
   {
      File f = fc.getSelectedFile();
      try {
            myURL = f.toURL();
          }catch (Exception ex){ System.out.print(ex);}

      System.out.print("I'll try to parse it " + myURL.toString());
      try {

        // Step 1: create a DocumentBuilderFactory
        DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
        // Step 2: create a DocumentBuilder
        DocumentBuilder db = dbf.newDocumentBuilder();
        // Step 3: parse the input file to get a Document object
        Document doc = db.parse(f);


        graphics = (Graphics2D)myBImage.getGraphics();
      //  doc =parser.getDocument();
        renderSVGDocument(doc,50,50);
        myCanvas.setImage(myBImage);
       }
       catch(Exception ex) {
       System.out.print(ex);
        }
     
    }

  }
}