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)