sboag       01/01/06 22:24:41

  Modified:    java/src/org/apache/xalan/processor ProcessorLRE.java
                        ProcessorStylesheetElement.java
                        StylesheetHandler.java XSLTAttributeDef.java
               java/src/org/apache/xalan/templates AVTPartXPath.java
                        ElemNumber.java StylesheetRoot.java
               java/src/org/apache/xpath XPath.java XPathAPI.java
               java/src/org/apache/xpath/compiler Compiler.java
                        XPathParser.java
               java/src/org/apache/xpath/res XPATHErrorResources.java
  Log:
  Make sure both the source locator and the error listener are set in
  the XPath Compiler and XPath parser, and the XPath object itself.
  This required passing the error listener to the XPath object, which
  had a ripple effect on several functions, including the constructor
  for StylesheetRoot.
  
  This was sparked by BugId 4402417 which [EMAIL PROTECTED]
  submitted to me privately, but may not be the same thing, since
  he was getting a NoSuchMethodError, and I don't
  have the stylesheet to replicate the bug.
  
  This fixes an error where a null pointer
  exception was being thrown if an unknown
  function was found.
  
  Revision  Changes    Path
  1.16      +3 -2      
xml-xalan/java/src/org/apache/xalan/processor/ProcessorLRE.java
  
  Index: ProcessorLRE.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/ProcessorLRE.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ProcessorLRE.java 2000/11/28 17:25:50     1.15
  +++ ProcessorLRE.java 2001/01/07 06:24:39     1.16
  @@ -121,7 +121,7 @@
           Stylesheet stylesheet;
           try
           {
  -          stylesheet = new StylesheetRoot(handler.getSchema());
  +          stylesheet = new StylesheetRoot(handler.getSchema(), 
handler.getStylesheetProcessor().getErrorListener());
           }
           catch(TransformerConfigurationException tfe)
           {
  @@ -189,7 +189,8 @@
   
           appendAndPush(handler, template);
   
  -        XPath rootMatch = new XPath("/", stylesheet, stylesheet, 
XPath.MATCH);
  +        XPath rootMatch = new XPath("/", stylesheet, stylesheet, 
XPath.MATCH, 
  +             handler.getStylesheetProcessor().getErrorListener());
   
           template.setMatch(rootMatch);
   
  
  
  
  1.8       +1 -1      
xml-xalan/java/src/org/apache/xalan/processor/ProcessorStylesheetElement.java
  
  Index: ProcessorStylesheetElement.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/ProcessorStylesheetElement.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ProcessorStylesheetElement.java   2000/11/28 17:25:50     1.7
  +++ ProcessorStylesheetElement.java   2001/01/07 06:24:39     1.8
  @@ -103,7 +103,7 @@
         {
           try
           {
  -          stylesheet = new StylesheetRoot(handler.getSchema());
  +          stylesheet = new StylesheetRoot(handler.getSchema(), 
handler.getStylesheetProcessor().getErrorListener());
           }
           catch(TransformerConfigurationException tfe)
           {
  
  
  
  1.30      +4 -7      
xml-xalan/java/src/org/apache/xalan/processor/StylesheetHandler.java
  
  Index: StylesheetHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/StylesheetHandler.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- StylesheetHandler.java    2000/12/13 19:25:53     1.29
  +++ StylesheetHandler.java    2001/01/07 06:24:39     1.30
  @@ -188,7 +188,8 @@
     public XPath createXPath(String str)
             throws javax.xml.transform.TransformerException
     {
  -    return new XPath(str, getLocator(), this, XPath.SELECT);
  +    ErrorListener handler = m_stylesheetProcessor.getErrorListener();
  +    return new XPath(str, getLocator(), this, XPath.SELECT, handler);
     }
   
     /**
  @@ -204,7 +205,8 @@
     XPath createMatchPatternXPath(String str)
             throws javax.xml.transform.TransformerException
     {
  -    return new XPath(str, getLocator(), this, XPath.MATCH);
  +    ErrorListener handler = m_stylesheetProcessor.getErrorListener();
  +    return new XPath(str, getLocator(), this, XPath.MATCH, handler);
     }
   
     /**
  @@ -1433,11 +1435,6 @@
      * older XSLT namespace URL.
      */
     private boolean warnedAboutOldXSLTNamespace = false;
  -
  -  /**
  -   * The query/pattern-matcher object.
  -   */
  -  private XPathParser m_xpathProcessor = new XPathParser();
   
     /** Stack of [EMAIL PROTECTED] org.xml.sax.helpers.NamespaceSupport} 
objects. */
     Stack m_nsSupportStack = new Stack();
  
  
  
  1.18      +1 -0      
xml-xalan/java/src/org/apache/xalan/processor/XSLTAttributeDef.java
  
  Index: XSLTAttributeDef.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/XSLTAttributeDef.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XSLTAttributeDef.java     2001/01/03 09:59:43     1.17
  +++ XSLTAttributeDef.java     2001/01/07 06:24:39     1.18
  @@ -576,6 +576,7 @@
       }
       catch (TransformerException te)
       {
  +      org.xml.sax.SAXException se = new org.xml.sax.SAXException(te);
         throw new org.xml.sax.SAXException(te);
       }
     }
  
  
  
  1.12      +1 -1      
xml-xalan/java/src/org/apache/xalan/templates/AVTPartXPath.java
  
  Index: AVTPartXPath.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/AVTPartXPath.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- AVTPartXPath.java 2001/01/02 03:36:45     1.11
  +++ AVTPartXPath.java 2001/01/07 06:24:40     1.12
  @@ -122,7 +122,7 @@
             XPathContext liaison)
               throws javax.xml.transform.TransformerException
     {
  -    m_xpath = new XPath(val, null, nsNode, XPath.SELECT);
  +    m_xpath = new XPath(val, null, nsNode, XPath.SELECT, 
liaison.getErrorListener());
     }
   
     /**
  
  
  
  1.16      +6 -6      
xml-xalan/java/src/org/apache/xalan/templates/ElemNumber.java
  
  Index: ElemNumber.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemNumber.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ElemNumber.java   2001/01/02 03:36:46     1.15
  +++ ElemNumber.java   2001/01/07 06:24:40     1.16
  @@ -684,35 +684,35 @@
   
           // countMatchPattern = 
m_stylesheet.createMatchPattern(contextNode.getNodeName(), this);
           countMatchPattern = new XPath(contextNode.getNodeName(), this, this,
  -                                      XPath.MATCH);
  +                                      XPath.MATCH, 
support.getErrorListener());
           break;
         case Node.ATTRIBUTE_NODE :
   
           // countMatchPattern = 
m_stylesheet.createMatchPattern("@"+contextNode.getNodeName(), this);
           countMatchPattern = new XPath("@" + contextNode.getNodeName(), this,
  -                                      this, XPath.MATCH);
  +                                      this, XPath.MATCH, 
support.getErrorListener());
           break;
         case Node.CDATA_SECTION_NODE :
         case Node.TEXT_NODE :
   
           // countMatchPattern = m_stylesheet.createMatchPattern("text()", 
this);
  -        countMatchPattern = new XPath("text()", this, this, XPath.MATCH);
  +        countMatchPattern = new XPath("text()", this, this, XPath.MATCH, 
support.getErrorListener());
           break;
         case Node.COMMENT_NODE :
   
           // countMatchPattern = m_stylesheet.createMatchPattern("comment()", 
this);
  -        countMatchPattern = new XPath("comment()", this, this, XPath.MATCH);
  +        countMatchPattern = new XPath("comment()", this, this, XPath.MATCH, 
support.getErrorListener());
           break;
         case Node.DOCUMENT_NODE :
   
           // countMatchPattern = m_stylesheet.createMatchPattern("/", this);
  -        countMatchPattern = new XPath("/", this, this, XPath.MATCH);
  +        countMatchPattern = new XPath("/", this, this, XPath.MATCH, 
support.getErrorListener());
           break;
         case Node.PROCESSING_INSTRUCTION_NODE :
   
           // countMatchPattern = 
m_stylesheet.createMatchPattern("pi("+contextNode.getNodeName()+")", this);
           countMatchPattern = new XPath("pi(" + contextNode.getNodeName()
  -                                      + ")", this, this, XPath.MATCH);
  +                                      + ")", this, this, XPath.MATCH, 
support.getErrorListener());
           break;
         default :
           countMatchPattern = null;
  
  
  
  1.38      +11 -10    
xml-xalan/java/src/org/apache/xalan/templates/StylesheetRoot.java
  
  Index: StylesheetRoot.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/StylesheetRoot.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- StylesheetRoot.java       2001/01/04 08:06:23     1.37
  +++ StylesheetRoot.java       2001/01/07 06:24:40     1.38
  @@ -85,6 +85,7 @@
   import javax.xml.transform.TransformerConfigurationException;
   import javax.xml.transform.Templates;
   import javax.xml.transform.OutputKeys;
  +import javax.xml.transform.ErrorListener;
   
   /**
    * <meta name="usage" content="general"/>
  @@ -98,7 +99,7 @@
      * Uses an XSL stylesheet document.
      * @throws TransformerConfigurationException if the baseIdentifier can not 
be resolved to a URL.
      */
  -  public StylesheetRoot() throws TransformerConfigurationException
  +  public StylesheetRoot(ErrorListener errorListener) throws 
TransformerConfigurationException
     {
   
       super(null);
  @@ -107,9 +108,9 @@
   
       try
       {
  -      m_selectDefault = new XPath("node()", this, this, XPath.SELECT);
  +      m_selectDefault = new XPath("node()", this, this, XPath.SELECT, 
errorListener);
   
  -      initDefaultRule();
  +      initDefaultRule(errorListener);
       }
       catch (TransformerException se)
       {
  @@ -130,10 +131,10 @@
      * @param schema The schema used to create this stylesheet
      * @throws TransformerConfigurationException if the baseIdentifier can not 
be resolved to a URL.
      */
  -  public StylesheetRoot(XSLTSchema schema) throws 
TransformerConfigurationException
  +  public StylesheetRoot(XSLTSchema schema, ErrorListener listener) throws 
TransformerConfigurationException
     {
   
  -    this();
  +    this(listener);
       m_availElems = schema.getElemsAvailable();
   
     }
  @@ -948,7 +949,7 @@
      *
      * @throws TransformerException
      */
  -  private void initDefaultRule() throws TransformerException
  +  private void initDefaultRule(ErrorListener errorListener) throws 
TransformerException
     {
   
       // Then manufacture a default
  @@ -956,7 +957,7 @@
   
       m_defaultRule.setStylesheet(this);
   
  -    XPath defMatch = new XPath("*", this, this, XPath.MATCH);
  +    XPath defMatch = new XPath("*", this, this, XPath.MATCH, errorListener);
   
       m_defaultRule.setMatch(defMatch);
   
  @@ -970,7 +971,7 @@
   
       m_defaultTextRule.setStylesheet(this);
   
  -    defMatch = new XPath("text() | @*", this, this, XPath.MATCH);
  +    defMatch = new XPath("text() | @*", this, this, XPath.MATCH, 
errorListener);
   
       m_defaultTextRule.setMatch(defMatch);
   
  @@ -978,7 +979,7 @@
   
       m_defaultTextRule.appendChild(elemValueOf);
   
  -    XPath selectPattern = new XPath(".", this, this, XPath.SELECT);
  +    XPath selectPattern = new XPath(".", this, this, XPath.SELECT, 
errorListener);
   
       elemValueOf.setSelect(selectPattern);
   
  @@ -987,7 +988,7 @@
   
       m_defaultRootRule.setStylesheet(this);
   
  -    defMatch = new XPath("/", this, this, XPath.MATCH);
  +    defMatch = new XPath("/", this, this, XPath.MATCH, errorListener);
   
       m_defaultRootRule.setMatch(defMatch);
   
  
  
  
  1.15      +27 -3     xml-xalan/java/src/org/apache/xpath/XPath.java
  
  Index: XPath.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/XPath.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- XPath.java        2001/01/02 03:47:13     1.14
  +++ XPath.java        2001/01/07 06:24:40     1.15
  @@ -177,17 +177,22 @@
      * @param prefixResolver A prefix resolver to use to resolve prefixes to 
      *                       namespace URIs.
      * @param type one of [EMAIL PROTECTED] #SELECT} or [EMAIL PROTECTED] 
#MATCH}.
  +   * @param errorListener The error listener, or null if default should be 
used.
      *
      * @throws javax.xml.transform.TransformerException if syntax or other 
error.
      */
     public XPath(
  -          String exprString, SourceLocator locator, PrefixResolver 
prefixResolver, int type)
  +          String exprString, SourceLocator locator, PrefixResolver 
prefixResolver, int type,
  +          ErrorListener errorListener)
               throws javax.xml.transform.TransformerException
     {      
  +    if(null == errorListener)
  +      errorListener = new org.apache.xml.utils.DefaultErrorHandler();
  +    
       m_patternString = exprString;
   
  -    XPathParser parser = new XPathParser();
  -    Compiler compiler = new Compiler(null, locator);
  +    XPathParser parser = new XPathParser(errorListener, locator);
  +    Compiler compiler = new Compiler(errorListener, locator);
   
       if (SELECT == type)
         parser.initXPath(compiler, exprString, prefixResolver);
  @@ -202,6 +207,25 @@
       // System.out.println("expr: "+expr);
       this.setExpression(expr);
   
  +  }
  +  
  +  /**
  +   * Construct an XPath object.  The object must be initialized by the
  +   * XPathParser.initXPath method.
  +   *
  +   * @param exprString The XPath expression.
  +   * @param locator The location of the expression, may be null.
  +   * @param prefixResolver A prefix resolver to use to resolve prefixes to 
  +   *                       namespace URIs.
  +   * @param type one of [EMAIL PROTECTED] #SELECT} or [EMAIL PROTECTED] 
#MATCH}.
  +   *
  +   * @throws javax.xml.transform.TransformerException if syntax or other 
error.
  +   */
  +  public XPath(
  +          String exprString, SourceLocator locator, PrefixResolver 
prefixResolver, int type)
  +            throws javax.xml.transform.TransformerException
  +  {  
  +    this(exprString, locator, prefixResolver, type, null);    
     }
   
     /**
  
  
  
  1.8       +2 -2      xml-xalan/java/src/org/apache/xpath/XPathAPI.java
  
  Index: XPathAPI.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/XPathAPI.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XPathAPI.java     2000/12/18 00:04:53     1.7
  +++ XPathAPI.java     2001/01/07 06:24:40     1.8
  @@ -262,7 +262,7 @@
         ? ((Document) namespaceNode).getDocumentElement() : namespaceNode);
   
       // Create the XPath object.
  -    XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT);
  +    XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null);
   
       // Execute the XPath, and have it return the result
       return xpath.execute(xpathSupport, contextNode, prefixResolver);
  @@ -301,7 +301,7 @@
       //    because XPathContext is weak in a number of areas... perhaps
       //    XPathContext should be done away with.)
       // Create the XPath object.
  -    XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT);
  +    XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null);
   
       // Execute the XPath, and have it return the result
       return xpath.execute(new XPathContext(), contextNode, prefixResolver);
  
  
  
  1.18      +2 -2      
xml-xalan/java/src/org/apache/xpath/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/compiler/Compiler.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Compiler.java     2000/12/17 05:20:08     1.17
  +++ Compiler.java     2001/01/07 06:24:40     1.18
  @@ -72,7 +72,6 @@
   import org.apache.xpath.operations.Operation;
   import org.apache.xpath.operations.Or;
   import org.apache.xpath.operations.Plus;
  -import org.apache.xpath.operations.Quo;
   import org.apache.xpath.operations.UnaryOperation;
   import org.apache.xpath.operations.Variable;
   import org.apache.xpath.objects.*;
  @@ -1002,7 +1001,7 @@
       }
       else
       {
  -      warn(XPATHErrorResources.WG_FUNCTION_TOKEN_NOT_FOUND, null);  
//"function token not found.");
  +      error(XPATHErrorResources.ER_FUNCTION_TOKEN_NOT_FOUND, null);  
//"function token not found.");
   
         return null;
       }
  @@ -1131,6 +1130,7 @@
     {
   
       java.lang.String fmsg = XSLMessages.createXPATHMessage(msg, args);
  +    
   
       if (null != m_errorHandler)
       {
  
  
  
  1.11      +13 -4     
xml-xalan/java/src/org/apache/xpath/compiler/XPathParser.java
  
  Index: XPathParser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/compiler/XPathParser.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XPathParser.java  2001/01/02 03:47:16     1.10
  +++ XPathParser.java  2001/01/07 06:24:40     1.11
  @@ -110,7 +110,11 @@
     /**
      * The parser constructor.
      */
  -  public XPathParser(){}
  +  public XPathParser(ErrorListener errorListener, 
javax.xml.transform.SourceLocator sourceLocator)
  +  {
  +    m_errorListener = errorListener;
  +    m_sourceLocator = sourceLocator;
  +  }
   
     /**
      * The prefix resolver to map prefixes to namespaces in the OpMap.
  @@ -226,6 +230,9 @@
     /** The error listener where syntax errors are to be sent.
      *  @serial  */
     private ErrorListener m_errorListener;
  +  
  +  /** The source location of the XPath. */
  +  javax.xml.transform.SourceLocator m_sourceLocator;
   
     /**
      * Allow an application to register an error event handler, where syntax 
  @@ -546,7 +553,7 @@
       if (null != ehandler)
       {
         // TO DO: Need to get stylesheet Locator from here.
  -      ehandler.warning(new TransformerException(fmsg));
  +      ehandler.warning(new TransformerException(fmsg, m_sourceLocator));
       }
       else
       {
  @@ -596,14 +603,16 @@
       String fmsg = XSLMessages.createXPATHMessage(msg, args);
       ErrorListener ehandler = this.getErrorListener();
   
  +    TransformerException te = new TransformerException(fmsg, 
m_sourceLocator);
       if (null != ehandler)
       {
         // TO DO: Need to get stylesheet Locator from here.
  -      ehandler.fatalError(new TransformerException(fmsg));
  +      ehandler.fatalError(te);
       }
       else
       {
  -      System.err.println(fmsg);
  +      // System.err.println(fmsg);
  +      throw te;
       }
     }
   
  
  
  
  1.7       +11 -1     
xml-xalan/java/src/org/apache/xpath/res/XPATHErrorResources.java
  
  Index: XPATHErrorResources.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/res/XPATHErrorResources.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XPATHErrorResources.java  2000/12/17 05:21:54     1.6
  +++ XPATHErrorResources.java  2001/01/07 06:24:41     1.7
  @@ -84,7 +84,7 @@
     public static final String WARNING_SUFFIX = "WR";
   
     /** Field MAX_CODE          */
  -  public static final int MAX_CODE = 68;  // this is needed to keep track of 
the number of messages          
  +  public static final int MAX_CODE = 69;  // this is needed to keep track of 
the number of messages          
   
     /** Field MAX_WARNING          */
     public static final int MAX_WARNING = 11;  // this is needed to keep track 
of the number of warnings
  @@ -732,6 +732,16 @@
     {
       contents[ER_XPATH_READOBJECT][1] = "In XPath.readObject: {0}";
     }
  +  
  +  /** Field ER_XPATH_READOBJECT         */
  +  public static final int ER_FUNCTION_TOKEN_NOT_FOUND = 69;
  +
  +  static
  +  {
  +    contents[ER_FUNCTION_TOKEN_NOT_FOUND][1] =
  +      "function token not found.";
  +  }
  +
   
     // Warnings...
   
  
  
  

Reply via email to