/**
   * Creates a new instance of a {@link javax.xml.parsers.DocumentBuilder} using the currently
   * configured parameters.
   *
   * @exception ParserConfigurationException if a DocumentBuilder cannot be created which satisfies
   *     the configuration requested.
   * @return A new instance of a DocumentBuilder. For Saxon the returned DocumentBuilder will be an
   *     instance of {@link DocumentBuilderImpl}
   */
  public DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {

    // Check that configuration options are all available

    if (!isExpandEntityReferences()) {
      throw new ParserConfigurationException("Saxon parser always expands entity references");
    }
    if (isIgnoringComments()) {
      throw new ParserConfigurationException("Saxon parser does not allow comments to be ignored");
    }
    if (isIgnoringElementContentWhitespace()) {
      throw new ParserConfigurationException(
          "Saxon parser does not allow whitespace in element content to be ignored");
    }
    if (!isNamespaceAware()) {
      throw new ParserConfigurationException("Saxon parser is always namespace aware");
    }

    DocumentBuilderImpl builder = new DocumentBuilderImpl();
    builder.setValidating(isValidating());
    builder.setXIncludeAware(xIncludeAware);
    if (isIgnoringElementContentWhitespace()) {
      builder.setStripSpace(Whitespace.IGNORABLE);
    }
    builder.setConfiguration(config);
    return builder;
  }
예제 #2
0
  public static void main(String[] args) throws Exception {
    // Initialize logging so only Cobra warnings are seen.
    Logger.getLogger("org.lobobrowser").setLevel(Level.WARNING);

    // Open a connection on the URL we want to render first.
    String uri = "http://www.google.com";
    URL url = new URL(uri);
    URLConnection connection = url.openConnection();
    InputStream in = connection.getInputStream();

    // A Reader should be created with the correct charset,
    // which may be obtained from the Content-Type header
    // of an HTTP response.
    Reader reader = new InputStreamReader(in);

    // InputSourceImpl constructor with URI recommended
    // so the renderer can resolve page component URLs.
    InputSource is = new InputSourceImpl(reader, uri);
    HtmlPanel htmlPanel = new HtmlPanel();
    UserAgentContext ucontext = new LocalUserAgentContext();
    HtmlRendererContext rendererContext = new LocalHtmlRendererContext(htmlPanel, ucontext);

    // Set a preferred width for the HtmlPanel,
    // which will allow getPreferredSize() to
    // be calculated according to block content.
    // We do this here to illustrate the
    // feature, but is generally not
    // recommended for performance reasons.
    htmlPanel.setPreferredWidth(800);

    // Note: This example does not perform incremental
    // rendering while loading the initial document.
    DocumentBuilderImpl builder =
        new DocumentBuilderImpl(rendererContext.getUserAgentContext(), rendererContext);

    Document document = builder.parse(is);
    in.close();

    // Set the document in the HtmlPanel. This method
    // schedules the document to be rendered in the
    // GUI thread.
    htmlPanel.setDocument(document, rendererContext);

    // Create a JFrame and add the HtmlPanel to it.
    final JFrame frame = new JFrame();
    frame.getContentPane().add(htmlPanel);

    // We pack the JFrame to demonstrate the
    // validity of HtmlPanel's preferred size.
    // Normally you would want to set a specific
    // JFrame size instead.

    // pack() should be called in the GUI dispatch
    // thread since the document is scheduled to
    // be rendered in that thread, and is required
    // for the preferred size determination.
    EventQueue.invokeLater(
        new Runnable() {
          public void run() {
            frame.pack();
            frame.setVisible(true);
          }
        });
  }