You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2003/10/13 16:03:36 UTC
DO NOT REPLY [Bug 23778] New: -
Assertion failed in FormatterTreeWalker while traversing a xalan:nodeset()
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23778>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23778
Assertion failed in FormatterTreeWalker while traversing a xalan:nodeset()
Summary: Assertion failed in FormatterTreeWalker while traversing
a xalan:nodeset()
Product: XalanC
Version: 1.6
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: XalanC
AssignedTo: xalan-dev@xml.apache.org
ReportedBy: ts@edvwl.de
Assertion failed: node != 0, file $XALANCROOT\src\xalanc\XMLSuppo
rt\FormatterTreeWalker.cpp, line 192:
bool
FormatterTreeWalker::endNode(const XalanNode* node)
{
assert(node != 0);
...
}
Sample Code samples/ExternalFunction/ExternalFunction.cpp, only class
FunctionAsctime must be overwritten with this code snippet:
#include <xalanc/XMLSupport/FormatterToXML.hpp>
#include <xalanc/XMLSupport/FormatterTreeWalker.hpp>
#include <xalanc/PlatformSupport/XalanOutputStreamPrintWriter.hpp>
#include <xalanc/PlatformSupport/XalanStdOutputStream.hpp>
// This class defines a function that runs the C function
// asctime() using the current system time.
class FunctionAsctime : public Function
{
public:
/**
* Execute an XPath function object. The function must return a valid
* object. Extension functions should override this version of execute
(),
* rather than one of the other calls designed for a specific number of
* arguments.
*
* @param executionContext executing context
* @param context current context node
* @param args vector of pointers to XObject arguments
* @param locator Locator for the XPath expression
that contains the function call
* @return pointer to the result XObject
*/
virtual XObjectPtr
execute(
XPathExecutionContext&
executionContext,
XalanNode*
context,
const XObjectArgVectorType& args,
const LocatorType*
locator) const
{
XALAN_USING_XALAN(FormatterToXML)
XALAN_USING_XALAN(FormatterTreeWalker)
XALAN_USING_XALAN(XalanStdOutputStream)
XALAN_USING_XALAN(XalanOutputStreamPrintWriter)
XALAN_USING_XALAN(XObject)
XalanStdOutputStream theStream(std::cerr);
XalanOutputStreamPrintWriter thePrintWriter(theStream);
FormatterToXML theFormatter
(thePrintWriter);
FormatterTreeWalker theWalker(theFormatter);
assert( args.size() == 1 );
assert( args[0].null() == false );
assert( args[0]->getType() == XObject::eObjectType::eTypeNodeSet );
assert( args[0]->nodeset().item(0) != NULL );
theFormatter.setShouldWriteXMLHeader(true);
theFormatter.startDocument();
theWalker.traverseSubtree(args[0]->nodeset().item(0));
theFormatter.endDocument();
return executionContext.getXObjectFactory().createString(XalanDOMString
("asctime()"));
}
#if !defined(XALAN_NO_USING_DECLARATION)
using Function::execute;
#endif
/**
* Create a copy of the function object.
*
* @return pointer to the new object
*/
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
#else
virtual FunctionAsctime*
#endif
clone() const
{
return new FunctionAsctime(*this);
}
protected:
/**
* Get the error message to report when
* the function is called with the wrong
* number of arguments.
*
* @return function error message
*/
const XalanDOMString
getError() const
{
return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The
asctime() function accepts one argument!"));
}
private:
// Not implemented...
FunctionAsctime&
operator=(const FunctionAsctime&);
bool
operator==(const FunctionAsctime&) const;
};
Sample Stylesheet (samples/ExternalFunction/foo.xsl, added an asctime param):
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:external="http://ExternalFunction.xalan-
c++.xml.apache.org"
exclude-result-prefixes="external">
<xsl:template match="area">
<xsl:choose>
<xsl:when test="function-available('external:square-root') and
function-available('external:cube')">
<given>
The area of each face of the cube is <xsl:value-of select="@value"/>
<xsl:text> square units </xsl:text> <xsl:value-of select="@units"/>.
</given>
<result>
Accordingly, the length of each side is <xsl:value-of
select="external:square-root(@value)"/>
<xsl:text> </xsl:text><xsl:value-of select="@units"/> and the volume
of the cube is
<xsl:value-of select="external:cube(external:square-root(@value))"/>
<xsl:text> cubic </xsl:text> <xsl:value-of select="@units"/>.
</result>
</xsl:when>
<xsl:otherwise>
<result>
The functions external:square-root() and external cube() are
not available!
</result>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="now">
<xsl:choose>
<xsl:when test="function-available('external:asctime')">
<when>
<xsl:variable
name="samplenode"><root><traverse>me</traverse></root></xsl:variable>
Date and time when we figured all this out: <xsl:value-of
select="external:asctime(xalan:nodeset($samplenode))"/>.
</when>
</xsl:when>
<xsl:otherwise>
<result>
The function external:asctime() is not available!
</result>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>