garyp       01/08/10 09:21:10

  Modified:    java/src/org/apache/xalan/templates ElemElement.java
               java/src/org/apache/xalan/transformer ResultTreeHandler.java
               java/src/org/apache/xml/utils DefaultErrorHandler.java
  Log:
  ResultTreeHandler was pushing a new namespace context but failing to note 
that result in more pushes than pops.  Cleaned up the execute() method of 
ElemElement to make it more understandable (to me) and added a few comments.  
The DefaultErrorHandler was not flushing Writers that it created.  Since the 
Writers are never closed (and cannot be as there is no close method), error 
messages were failing to appear.
  
  Revision  Changes    Path
  1.20      +67 -74    
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.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- ElemElement.java  2001/06/12 19:15:09     1.19
  +++ ElemElement.java  2001/08/10 16:21:09     1.20
  @@ -208,13 +208,14 @@
      {
       if(nodeName == null)
         return false;
  -      
  -    int indexOfNSSep = nodeName.indexOf(':');
  +
       int len = nodeName.length();
       
       if(len == 0)
         return false;
         
  +    int indexOfNSSep = nodeName.indexOf(':');
  +
       if(indexOfNSSep + 1 == len)
         return false;
         
  @@ -285,91 +286,73 @@
       int sourceNode = xctxt.getCurrentNode();
       String nodeName = m_name_avt.evaluate(xctxt, sourceNode, this);
   
  -    // make sure that if a prefix is specified on the attribute name, it is 
valid
  -    int indexOfNSSep = nodeName.indexOf(':');
       String prefix = null;
  -    String nodeNamespace = null;
  -
  -    if (nodeName.length() == 0)
  -      nodeName = null;
  +    String nodeNamespace = "";
   
  -    if ((null != nodeName) /* && (indexOfNSSep >= 0) */)
  +    if (!validateNodeName(nodeName))
       {
  -      prefix = (indexOfNSSep > 0) ? nodeName.substring(0, indexOfNSSep) : "";
  -      
  -      // Catch the exception this may cause. We don't want to stop 
processing.
  -      try
  -      {
  -        // Maybe temporary, until I get this worked out.  test: axes59
  -        nodeNamespace = getNamespaceForPrefix(prefix);
  -
  -        if (null == nodeNamespace && indexOfNSSep <= 0)
  -          nodeNamespace = "";
  -
  -        // Check if valid QName. Assuming that if the prefix is defined,
  -        // it is valid.
  -        if (!validateNodeName(nodeName))
  -        {
  -          transformer.getMsgMgr().warn(
  -            this, XSLTErrorResources.WG_ILLEGAL_ATTRIBUTE_NAME,
  -            new Object[]{ nodeName });
  -
  -          nodeName = null;
  -        }
  -      }
  -      catch (Exception ex)
  -      {
  -        transformer.getMsgMgr().warn(
  -          this, XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
  -          new Object[]{ prefix });
  -
  -        nodeName = null;
  -      }
  -    }
  -
  -    // Check if valid QName
  -    else if (null == nodeName)
  -    {
         transformer.getMsgMgr().warn(
  -        this, XSLTErrorResources.WG_ILLEGAL_ATTRIBUTE_NAME,
  -        new Object[]{ nodeName });
  +        this, XSLTErrorResources.WG_ILLEGAL_ATTRIBUTE_VALUE,
  +        new Object[]{ Constants.ATTRNAME_NAME, nodeName });
   
         nodeName = null;
       }
  -    else if (nodeName.length() == 0 ||!isValidNCName(nodeName))
  -    {
  -      transformer.getMsgMgr().warn(
  -        this, XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
  -        new Object[]{ nodeName });
   
  -      nodeName = null;
  -    }
  -
  -    if (null != nodeName)
  +    else
       {
  +      prefix = QName.getPrefixPart(nodeName);
  +
         if (null != m_namespace_avt)
         {
           nodeNamespace = m_namespace_avt.evaluate(xctxt, sourceNode, this);
  -
  -        // System.out.println("nodeNamespace: "+nodeNamespace);
           if (null == nodeNamespace)
             nodeNamespace = "";
   
  +        // Determine the actual prefix that we will use for this 
nodeNamespace
  +
           prefix = resolvePrefix(rhandler, prefix, nodeNamespace);
  -        
           if (null == prefix)
             prefix = "";
   
           if (prefix.length() > 0)
             nodeName = (prefix + ":" + QName.getLocalPart(nodeName));
  +        else
  +          nodeName = QName.getLocalPart(nodeName);
         }
  -      else if (null != prefix && null == nodeNamespace)
  +
  +      // No namespace attribute was supplied. Use the namespace declarations
  +      // currently in effect for the xsl:element element.
  +      else    
         {
  -        transformer.getMsgMgr().warn(
  -          this, XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
  -          new Object[]{ prefix });
  +        try
  +        {
  +          // Maybe temporary, until I get this worked out.  test: axes59
  +          nodeNamespace = getNamespaceForPrefix(prefix);
  +
  +          // If we get back a null nodeNamespace, that means that this 
prefix could
  +          // not be found in the table.  This is okay only for a default 
namespace
  +          // that has never been declared.
  +
  +          if ( (null == nodeNamespace) && (prefix.length() == 0) )
  +            nodeNamespace = "";
  +          else if (null == nodeNamespace)
  +          {
  +            transformer.getMsgMgr().warn(
  +              this, XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
  +              new Object[]{ prefix });
   
  -        nodeName = null;
  +            nodeName = null;
  +          }
  +
  +        }
  +        catch (Exception ex)
  +        {
  +          transformer.getMsgMgr().warn(
  +            this, XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX,
  +            new Object[]{ prefix });
  +
  +          nodeName = null;
  +        }
         }
       }
   
  @@ -379,13 +362,15 @@
     /**
      * Construct a node in the result tree.  This method is overloaded by 
      * xsl:attribute. At this class level, this method creates an element.
  +   * If the node is null, we instantiate only the content of the node in 
accordance
  +   * with section 7.1.2 of the XSLT 1.0 Recommendation.
      *
  -   * @param nodeName The name of the node, which may be null.
  -   * @param prefix The prefix for the namespace, which may be null.
  -   * @param nodeNamespace The namespace of the node, which may be null.
  +   * @param nodeName The name of the node, which may be <code>null</code>.  
If <code>null</code>,
  +   *                 only the non-attribute children of this node will be 
processed.
  +   * @param prefix The prefix for the namespace, which may be 
<code>null</code>.
  +   *               If not <code>null</code>, this prefix will be mapped and 
unmapped.
  +   * @param nodeNamespace The namespace of the node, which may be not be 
<code>null</code>.
      * @param transformer non-null reference to the the current transform-time 
state.
  -   * @param sourceNode non-null reference to the <a 
href="http://www.w3.org/TR/xslt#dt-current-node";>current source node</a>.
  -   * @param mode reference, which may be null, to the <a 
href="http://www.w3.org/TR/xslt#modes";>current mode</a>.
      *
      * @throws TransformerException
      */
  @@ -394,13 +379,18 @@
               throws TransformerException
     {
   
  +    boolean shouldAddAttrs;
  +
       try
       {
         ResultTreeHandler rhandler = transformer.getResultTreeHandler();
   
  -      if (null != nodeName)
  +      if (null == nodeName)
         {
  -
  +        shouldAddAttrs = false;
  +      }
  +      else
  +      {
           // Add namespace declarations.
           executeNSDecls(transformer);
   
  @@ -411,13 +401,12 @@
   
           rhandler.startElement(nodeNamespace, QName.getLocalPart(nodeName),
                                 nodeName, null);
  -      }
  -
  -      boolean shouldAddAttrs = (null != nodeName);
   
  -      if (shouldAddAttrs)
           super.execute(transformer);
   
  +        shouldAddAttrs = true;
  +      }
  +
         transformer.executeChildTemplates(this, shouldAddAttrs);
   
         // Now end the element if name was valid
  @@ -425,6 +414,10 @@
         {
           rhandler.endElement(nodeNamespace, QName.getLocalPart(nodeName),
                               nodeName);
  +        if (null != prefix)
  +        {
  +          rhandler.endPrefixMapping(prefix);
  +        }
           unexecuteNSDecls(transformer);
         }
       }
  
  
  
  1.46      +2 -0      
xml-xalan/java/src/org/apache/xalan/transformer/ResultTreeHandler.java
  
  Index: ResultTreeHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/ResultTreeHandler.java,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- ResultTreeHandler.java    2001/08/09 18:29:05     1.45
  +++ ResultTreeHandler.java    2001/08/10 16:21:10     1.46
  @@ -247,6 +247,8 @@
             "ResultTreeHandler#startElement - push(startElement)");
   
         m_nsSupport.pushContext();
  +
  +      m_nsContextPushed = true;
       }
       
       if (ns != null)
  
  
  
  1.7       +2 -2      
xml-xalan/java/src/org/apache/xml/utils/DefaultErrorHandler.java
  
  Index: DefaultErrorHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/utils/DefaultErrorHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DefaultErrorHandler.java  2001/08/06 22:17:17     1.6
  +++ DefaultErrorHandler.java  2001/08/10 16:21:10     1.7
  @@ -85,7 +85,7 @@
      */
     public DefaultErrorHandler(PrintStream pw)
     {
  -    m_pw = new PrintWriter(pw);
  +    m_pw = new PrintWriter(pw, true);
     }
     
     /**
  @@ -93,7 +93,7 @@
      */
     public DefaultErrorHandler()
     {
  -    m_pw = new PrintWriter(System.err);
  +    m_pw = new PrintWriter(System.err, true);
     }
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to