You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sb...@apache.org on 2001/01/31 08:07:05 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/templates ElemElement.java

sboag       01/01/30 23:07:05

  Modified:    java/src/org/apache/xalan/templates ElemElement.java
  Log:
  Fix regression for error recovery for ignoring of elements where the
  prefix can not be resolved, or the name is bad.
  
  Revision  Changes    Path
  1.15      +42 -22    xml-xalan/java/src/org/apache/xalan/templates/ElemElement.java
  
  Index: ElemElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemElement.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- ElemElement.java	2001/01/26 01:26:58	1.14
  +++ ElemElement.java	2001/01/31 07:07:04	1.15
  @@ -204,6 +204,7 @@
       try
       {
   
  +      boolean shouldAddAttrs = true;
         ResultTreeHandler rhandler = transformer.getResultTreeHandler();
         XPathContext xctxt = transformer.getXPathContext();
         String elemName = m_name_avt.evaluate(xctxt, sourceNode, this);
  @@ -211,26 +212,30 @@
         // make sure that if a prefix is specified on the attribute name, it is valid
         int indexOfNSSep = elemName.indexOf(':');
         String prefix = null;
  -      String elemNameSpace = "";
  +      String elemNameSpace = null;
  +      if(elemName.length() == 0)
  +        elemName = null;
   
  -      if (indexOfNSSep >= 0)
  +      if ((null != elemName) /* && (indexOfNSSep >= 0) */)
         {
  -        prefix = elemName.substring(0, indexOfNSSep);
  +        prefix = (indexOfNSSep > 0) ? elemName.substring(0, indexOfNSSep) : "";
   
           // Catch the exception this may cause. We don't want to stop processing.
           try
           {
             elemNameSpace = getNamespaceForPrefix(prefix);
  +          if(null == elemNameSpace && indexOfNSSep <= 0)
  +            elemNameSpace = "";
   
             // Check if valid QName. Assuming that if the prefix is defined,
             // it is valid.
  -          if (indexOfNSSep + 1 == elemName.length()
  -              ||!isValidNCName(elemName.substring(indexOfNSSep + 1)))
  +          int len = elemNameSpace.length();
  +          if (len > 0 && ((indexOfNSSep + 1 == len)
  +              ||!isValidNCName(elemName.substring(indexOfNSSep + 1))))
             {
               transformer.getMsgMgr().warn(this,
                                            XSLTErrorResources.WG_ILLEGAL_ATTRIBUTE_NAME,
                                            new Object[]{ elemName });
  -
               elemName = null;
             }
           }
  @@ -239,11 +244,13 @@
             transformer.getMsgMgr().warn(this,
                                          XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
                                          new Object[]{ prefix });
  +          shouldAddAttrs = false;
  +          elemName = null;
           }
         }
   
         // Check if valid QName
  -      else if (elemName.length() == 0 ||!isValidNCName(elemName))
  +      else if (null == elemName)
         {
           transformer.getMsgMgr().warn(this,
                                        XSLTErrorResources.WG_ILLEGAL_ATTRIBUTE_NAME,
  @@ -251,20 +258,28 @@
   
           elemName = null;
         }
  +      else if (elemName.length() == 0 ||!isValidNCName(elemName))
  +      {
  +        transformer.getMsgMgr().warn(this,
  +                                     XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
  +                                     new Object[]{ elemName });
   
  +        elemName = null;
  +      }
  +
         if (null != elemName)
         {
           if (null != m_namespace_avt)
           {
             elemNameSpace = m_namespace_avt.evaluate(xctxt, sourceNode, this);
  -
  +// System.out.println("elemNameSpace: "+elemNameSpace);
             if (null == elemNameSpace)
               elemNameSpace = "";
               
             if(null != prefix)
             {
               String nsPrefix = rhandler.getPrefix(elemNameSpace);
  -            
  + // System.out.println("nsPrefix: "+nsPrefix);           
               if (null == nsPrefix)
                 nsPrefix = "";
                 
  @@ -285,25 +300,30 @@
             transformer.getMsgMgr().warn(this,
                                          XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
                                          new Object[]{ prefix });
  +          elemName = null;
           }
   
  -        // Add namespace declarations.
  -        executeNSDecls(transformer);
  -
  -        if (null != prefix)
  +        if(null != elemName)
           {
  -          rhandler.startPrefixMapping(prefix, elemNameSpace, true);
  +          // Add namespace declarations.
  +          executeNSDecls(transformer);
  +  
  +          if (null != prefix)
  +          {
  +            rhandler.startPrefixMapping(prefix, elemNameSpace, true);
  +          }
  +  
  +          rhandler.startElement(elemNameSpace, QName.getLocalPart(elemName),
  +                                elemName);
           }
  -
  -        rhandler.startElement(elemNameSpace, QName.getLocalPart(elemName),
  -                              elemName);
         }
   
  -      // Instantiate content of xsl:element. Note that if startElement was not
  -      // called(ie: if invalid element name, the element's attributes will be
  -      // excluded because transformer.m_pendingElementName will be null.
  -      super.execute(transformer, sourceNode, mode);
  -      transformer.executeChildTemplates(this, sourceNode, mode);
  +      if(null == elemName)
  +        shouldAddAttrs = false;
  +        
  +      if(shouldAddAttrs)
  +        super.execute(transformer, sourceNode, mode);
  +      transformer.executeChildTemplates(this, sourceNode, mode, shouldAddAttrs);
   
         // Now end the element if name was valid
         if (null != elemName)