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]