closeStartTag() in ToHTMLSAXHandler does not pass localName or namespace to the 
ContentHandler.  Results in ValidationException in Apache FOP.
----------------------------------------------------------------------------------------------------------------------------------------------

                 Key: XALANJ-2323
                 URL: http://issues.apache.org/jira/browse/XALANJ-2323
             Project: XalanJ2
          Issue Type: Bug
          Components: Serialization
    Affects Versions: 2.7
         Environment: All environments
            Reporter: Chad W. Gill


In ToHTMLSAXHandler the closeStartTag() incorrectly passes EmptyString to 
namespace and ElementName to localName of the ContentHandler.

>From org.apache.xml.serializer.ToHTMLSAXHandler :
    protected void closeStartTag() throws SAXException
    {

        m_elemContext.m_startTagOpen = false;

        // Now is time to send the startElement event
        m_saxHandler.startElement(
            EMPTYSTRING,                                                  <<<< 
Should this be m_elementURI ?
            m_elemContext.m_elementName,                <<<< Should this be 
m_elementLocalName ?
            m_elemContext.m_elementName,
            m_attributes);
        m_attributes.clear();       

    }

This results in a ValidationException being thrown by Apache FOP 
DefaultHandler's startElement().  In this case, the namespace = "" (should be 
"http://www.w3.org/1999/XSL/Format";)  and the localName = "fo:root" (should be 
"root")

>From org.apache.fop.fo.FOTreeBuilder:
         public void startElement(String namespaceURI, String localName, String 
rawName,
                                 Attributes attlist) throws SAXException {

            /* the node found in the FO document */
            FONode foNode;
            PropertyList propertyList = null;

            // Check to ensure first node encountered is an fo:root
            if (rootFObj == null) {
                if (!namespaceURI.equals(FOElementMapping.URI) 
                    || !localName.equals("root")) {
                    throw new ValidationException(
                        "Error: First element must be the fo:root formatting 
object. "
                        + "Found " + FONode.getNodeString(namespaceURI, 
localName) 
                        + " instead."
                        + " Please make sure you're producing a valid XSL-FO 
document.");
                }.......

This exception will untimately produce the following message:
javax.xml.transform.TransformerException: java.lang.IllegalStateException: 
endElement() called for fo:root where there is no current element.

-------  Here is a workaround -----------------
In XALAN, the decision to use ToHTMLSAXHandler is made if the following is in 
the xslt file:  <xsl:output version="1.0" method="html" encoding="UTF-8" 
indent="no"/>.   If you change the method="html" to method="xml", XALAN will 
use ToXMLSAXHandler instead (which will correctly pass namespace and localName).

FYI, The FO XSLT that I'm using was produced by Altova Stylevision.



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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

Reply via email to