mmidy       00/08/14 12:11:34

  Modified:    src/org/apache/xalan/xslt XSLTEngineImpl.java
  Added:       src/org/apache/xalan/xpath/xml JaxpLiaison.java
  Log:
  JAXP support
  
  Revision  Changes    Path
  1.1                  xml-xalan/src/org/apache/xalan/xpath/xml/JaxpLiaison.java
  
  Index: JaxpLiaison.java
  ===================================================================
  /*
   * 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 [EMAIL PROTECTED]
   *
   * 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.xpath.xml;
  
  import java.io.*;
  import java.net.URL;
  
  import org.w3c.dom.*;
  import org.xml.sax.*;
  import javax.xml.parsers.*;
  
  import org.apache.xalan.xpath.xml.*;
  import org.apache.xalan.xpath.*;
  
  
  /**
   *  Allow use of a generic JAXP parser with Xalan. 
   */
  public class JaxpLiaison extends XMLParserLiaisonDefault
  {
    // later.
    String domFactoryName=null;
    String saxFactoryName=null;
    
    public JaxpLiaison()
    {
    }
  
    // debug
    static final int debug=0;
    void d( String s) {
      System.out.println("JaxpLiaison: " + s );
    }
  
    // -------------------- Liason implementation --------------------
  
    public String getParserDescription()
    {
      return "Jaxp";
    }
    
    public void checkNode(Node node)
      throws SAXException
    {
      if( debug>0) d("Calling checkNode");
    }
  
    public boolean supportsSAX()
    {
      if(debug>0) d("Calling supportsSAX");
      return true;
    }
  
    public void parse (InputSource source)
      throws SAXException, IOException
    {
      try {
        if( m_docHandler != null ) 
        {        
          SAXParserFactory sf=null;
          //if( saxFactoryName == null)
          sf=SAXParserFactory.newInstance();
          //                             else
          //                                 
sf=SAXParserFactory.newInstance(saxFactoryName);
  
          sf.setNamespaceAware( true );
          SAXParser saxP=sf.newSAXParser();
          
          Parser p=saxP.getParser();
  
          if( debug>0) 
            d("Parse " + m_docHandler +
                         " " + m_DTDHandler+ 
                         " " + m_errorHandler +
                         " " + m_entityResolver);
          
          p.setDocumentHandler( m_docHandler);
  
          if(null != m_DTDHandler) 
          {
            p.setDTDHandler(m_DTDHandler);
          }
          
          if(null != m_errorHandler) 
          {
            p.setErrorHandler(m_errorHandler);
          }  
          else 
          {
            String ident = source.getSystemId();
            if( ident==null ) ident=source.toString();
            p.setErrorHandler(new DefaultErrorHandler(ident));
          }
          
          if(null != m_entityResolver) 
          {
            p.setEntityResolver(m_entityResolver);
          }
          
          p.parse(source);
          // XXX XXX Workaround - without this stylesheed handler will
          // remain set
          m_docHandler=null;
        } 
        else 
        {
          if(debug>0) d("XalanJaxpLiaison: dom parse " + m_docHandler +
                        " " + m_entityResolver + " " + m_errorHandler);
          DocumentBuilderFactory df=null;
          //                             if( domFactoryName==null )
          df=DocumentBuilderFactory.newInstance();
          // else
          //                                 
df=DocumentBuilderFactory.newInstance(domFactoryName);
          df.setNamespaceAware( true );
          DocumentBuilder docB=df.newDocumentBuilder();
          
          if (m_entityResolver != null) 
          {
            docB.setEntityResolver(m_entityResolver);
          }
          
          if (m_errorHandler != null) 
          {
            docB.setErrorHandler(m_errorHandler);      
          }
          
  
          m_document= docB.parse(source);
        }
      } 
      catch(Exception e ) 
      {
        e.printStackTrace();
      }
    }
  
    public Document getDocument() 
    {
      if(debug>0) d( "getDocument() " + m_document);
      return m_document;
    }
    
    /**
     * Create an empty DOM Document.  Mainly used for creating an
     * output document.  Implementation of XMLParserLiaison
     * interface method.
     */
    public Document createDocument()
    {
      if(debug>0) d( "createDocument() " );
      try {
        DocumentBuilderFactory df=DocumentBuilderFactory.newInstance();
        DocumentBuilder docB=df.newDocumentBuilder();
        return docB.newDocument();
      } 
      catch( Exception ex ) 
      {
        ex.printStackTrace();
        return null;
      }
    }
  
    public Element getElementByID(String id, Document doc)
    {
      if(debug>-1) d("GetElemByID");
      return null; 
    }
  }
  
  
  
  
  1.67      +35 -19    xml-xalan/src/org/apache/xalan/xslt/XSLTEngineImpl.java
  
  Index: XSLTEngineImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/src/org/apache/xalan/xslt/XSLTEngineImpl.java,v
  retrieving revision 1.66
  retrieving revision 1.67
  diff -u -r1.66 -r1.67
  --- XSLTEngineImpl.java       2000/08/11 05:36:15     1.66
  +++ XSLTEngineImpl.java       2000/08/14 19:11:34     1.67
  @@ -492,33 +492,49 @@
          // Xerces DOM - Xerces DOM - switch to Xerces Liaison
       
       
  -    if((null != resultNode) && (resultNode instanceof 
org.apache.xerces.dom.NodeImpl) &&
  -       (m_parserLiaison instanceof org.apache.xalan.xpath.dtm.DTMLiaison))
  -    {
  -      if((null != sourceNode) 
  -         && (!(sourceNode instanceof org.apache.xerces.dom.NodeImpl)))
  -      {
  -        throw new 
SAXException(XSLMessages.createMessage(XSLTErrorResources.ER_CANNOT_MIX_XERCESDOM,
 null)); //"Can not mix non Xerces-DOM input with Xerces-DOM output!");
  -      }
  -      
  +    // common condition
  +    if(! 
"org.apache.xalan.xpath.dtm.DTMLiaison".equals(m_parserLiaison.getClass().getName()))
  +      return;
  +
  +    String specialNote="org.apache.xerces.dom.NodeImpl";
  +
  +    boolean specialResult=false;
  +    if( resultNode != null && 
specialNote.equals(resultNode.getClass().getName()))
  +      specialResult=true;
  +
  +    boolean specialSource=false;
  +    if( sourceNode != null && 
specialNote.equals(sourceNode.getClass().getName()))
  +      specialSource=true;
  +
  +    if( specialResult && ! specialSource && sourceNode!= null )
  +      throw new 
SAXException(XSLMessages.createMessage(XSLTErrorResources.ER_CANNOT_MIX_XERCESDOM,
 null));
  +    //"Can not mix non Xerces-DOM input with Xerces-DOM output!");
  +
  +    if( specialResult ) 
  +    { // either sourceNote==null or specialSource
  +      // XXX class.forName ?
         XMLParserLiaison newLiaison = new 
org.apache.xalan.xpath.xdom.XercesLiaison();
  +
         
newLiaison.copyFromOtherLiaison((XMLParserLiaisonDefault)m_parserLiaison);
  +
         setExecContext(newLiaison);
  +      return;
       }
  -    else if((null != sourceNode)&& (sourceNode instanceof 
org.apache.xerces.dom.NodeImpl) &&
  -       (m_parserLiaison instanceof org.apache.xalan.xpath.dtm.DTMLiaison))
  -    {
  -      if((null != resultNode) 
  -         && (!(resultNode instanceof org.apache.xerces.dom.NodeImpl)))
  -      {
  -        throw new 
SAXException(XSLMessages.createMessage(XSLTErrorResources.ER_CANNOT_MIX_XERCESDOM,
 null)); //"Can not mix Xerces-DOM input with non Xerces-DOM output!");
  -      }
  -      
  +    
  +    if( specialSource && ! specialResult && resultNode!=null )
  +        throw new SAXException(XSLMessages.createMessage(XSLTErrorResources. 
       ER_CANNOT_MIX_XERCESDOM, null));
  +    //"Can not mix Xerces-DOM input with non Xerces-DOM output!");
  +
  +    if( specialSource ) 
  +    { // either specialResult or resultNode==null
         XMLParserLiaison newLiaison = new 
org.apache.xalan.xpath.xdom.XercesLiaison();
  +
         
newLiaison.copyFromOtherLiaison((XMLParserLiaisonDefault)m_parserLiaison);
  +
         setExecContext(newLiaison);
  +      
       }
  -  }
  +  }  
   
     /**
      * Transform the source tree to the output in the given
  
  
  

Reply via email to