Package org.apache.xalan.lib.sql

Source Code of org.apache.xalan.lib.sql.ExtensionError

/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation.  All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in
*    the documentation and/or other materials provided with the
*    distribution.
*
* 3. The end-user documentation included with the redistribution,
*    if any, must include the following acknowledgment:
*       "This product includes software developed by the
*        Apache Software Foundation (http://www.apache.org/)."
*    Alternately, this acknowledgment may appear in the software itself,
*    if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xalan" and "Apache Software Foundation" must
*    not be used to endorse or promote products derived from this
*    software without prior written permission. For written
*    permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
*    nor may "Apache" appear in their name, without prior written
*    permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999, Lotus
* Development Corporation., http://www.lotus.com.  For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.xalan.lib.sql;

import org.w3c.dom.Node;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import org.w3c.dom.CDATASection;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.DOMException;

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

import org.apache.xalan.stree.DocumentImpl;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.NodeIterator;

import java.io.StringWriter;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.apache.xpath.axes.ContextNodeList;

/**
*
* A base class that will convert an exception into an XML stream
* that can be returned in place of the standard result. The XML
* format returned is a follows.
*
* <ext-error>
<exception-info>
*    <message> Message from the Exception thrown </message>
*    <stack> Current stack information as CData </stack>
<exception-info>
*
*  If another class subclasses this class, there will be an
*  oppurtitny to add specific information here. Each Extension
*  class should implement their own specific Extension Error
*  class.
* <ext-error>
*
* @author  John Gentilin
* @version 1.0
*
*/


public class ExtensionError
  implements NodeIterator, ContextNodeList, Cloneable
{
  private static final boolean DEBUG = false;

  private boolean   m_FirstTime = true;
  private Document  m_doc = null;

  public ExtensionError()
  {
  }

  public ExtensionError(Exception err)
  {
    processBaseError(err);
    // dump();
  }

  protected void processBaseError(Exception err)
  {
    try
    {
      DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder docBuilder = dfactory.newDocumentBuilder();

      m_doc = docBuilder.newDocument();

      Element etmp = null;
      Text text = null;
      CDATASection cdata = null;

      Element root = m_doc.createElement("ext-error");
      m_doc.appendChild(root);


      Element info = m_doc.createElement("exception-info");
      root.appendChild(info);

      etmp = m_doc.createElement("message");
      info.appendChild(etmp);
      text = m_doc.createTextNode(err.getLocalizedMessage());
      etmp.appendChild(text);

      // System.out.println("MESSAGE[" + err.getLocalizedMessage() + "]");

      //ByteArrayOutputStream bos = new ByteArrayOutputStream();
      //PrintStream ps = new PrintStream(bos);
      //err.printStackTrace(ps);
      //String stack = bos.toString();

      // System.out.println(stack);

      //etmp = m_doc.createElement("stack");
      //info.appendChild(etmp);
      //cdata = m_doc.createCDATASection(stack);
      //etmp.appendChild(text);

      populateSpecificData(m_doc, root);

    }
    catch(Exception e)
    {
      // e.printStackTrace();

      m_doc = null;
    }
  }

  /**
   * Other classes that extend this class will overrid this mehood to
   * add any specific information.
   *
   */

  protected void populateSpecificData(Document doc, Node node)
  {
  }

  public Node getRoot()
  {
    return m_doc;
  }

  /**
   *  This attribute determines which node types are presented via the
   * iterator. The available set of constants is defined in the
   * <code>NodeFilter</code> interface.
   *
   * @return which node types are to be presented
   */
  public int getWhatToShow()
  {

    if (DEBUG)
      System.out.println("In ExtensionError.getWhatToShow");

    // TODO: ??
    return NodeFilter.SHOW_ALL & ~NodeFilter.SHOW_ENTITY_REFERENCE;
  }

  /**
   *  The filter used to screen nodes.
   * @return null.
   */
  public NodeFilter getFilter()
  {

    if (DEBUG)
      System.out.println("In ExtensionError.getFilter");

    return null;
  }

  /**
   *  The value of this flag determines whether the children of entity
   * reference nodes are visible to the iterator. If false, they will be
   * skipped over.
   * <br> To produce a view of the document that has entity references
   * expanded and does not expose the entity reference node itself, use the
   * whatToShow flags to hide the entity reference node and set
   * expandEntityReferences to true when creating the iterator. To produce
   * a view of the document that has entity reference nodes but no entity
   * expansion, use the whatToShow flags to show the entity reference node
   * and set expandEntityReferences to false.
   * @return true.
   */
  public boolean getExpandEntityReferences()
  {

    if (DEBUG)
      System.out.println("In ExtensionError.getExpandEntityReferences");

    return true;
  }

  /**
   * Return the #Document node (one role the XStatement plays) the first time called;
   * return null thereafter.
   * @return this or null.
   *
   * @throws DOMException
   */

  public Node nextNode() throws DOMException
  {

    if (DEBUG)
      System.out.println("In Extension Error: next node");

    if (! m_FirstTime) return null;

    m_FirstTime = false;
    return m_doc;
  }

  public Node previousNode()
    throws DOMException
  {
    return null;
  }

  public void detach()
  {
  }


  /*
  public void dump()
  {

    try
    {
      //Serialize DOM
      OutputFormat    format  = new OutputFormat();
      //Writer will be a String
      StringWriter    stringOut = new StringWriter();

      XMLSerializer    serial = new XMLSerializer( stringOut, format );

      // As a DOM Serializer
      serial.asDOMSerializer();

      Element e = m_doc.getDocumentElement();
      serial.serialize(e);
      System.out.println("Extension Error:");
      String display = stringOut.toString();
      System.out.println( display );
    }
    catch(Exception e)
    {
      // Empty
    }

  }
  */

  public Node getCurrentNode()
  {
    return m_doc;
  }

  public int getCurrentPos()
  {
    return 0;
  }

  public void reset()
  {
    m_FirstTime = true;
  }

  public void setShouldCacheNodes(boolean b)
  {
    //TODO: Implement this org.apache.xpath.axes.ContextNodeList method
  }

  public void runTo(int index)
  {
    //TODO: Implement this org.apache.xpath.axes.ContextNodeList method
  }

  public void setCurrentPos(int i)
  {
    //TODO: Implement this org.apache.xpath.axes.ContextNodeList method
  }

  public int size()
  {
    return 1;
  }

  public boolean isFresh()
  {
    return m_FirstTime;
  }

  public NodeIterator cloneWithReset() throws CloneNotSupportedException
  {
    ExtensionError clone = (ExtensionError) super.clone();
    clone.reset();
    return clone;
  }

  public Object clone() throws CloneNotSupportedException
  {
    ExtensionError clone = (ExtensionError) super.clone();
    return clone;
  }

  public int getLast()
  {
    return 0;
  }

  public void setLast(int last)
  {
  }
}
TOP

Related Classes of org.apache.xalan.lib.sql.ExtensionError

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.