-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I'm hunting that bug too ;-)
My observation until now is that:
a) SitemapLanguage#createNodeBuilder creates the CallNodeBuilder
b) it seems (during my debugging) there is only one CallNodeBuilder in
the system (even though it is not marked ThreadSafe as other
NodeBuilders)
c) in CallNodeBuilder#buildNode the member variable node will be
overwritten each time that method is called (and it is called for
each <map:call .../> element)
I don't know what a NodeBuilder should do in its buildNode method but I
think there might be the problem. Later in the processings the linkNode
method on the CallNodeBuilder gets called where the interpreter is set
on the node. But because of c) only one instance gets the interpreter
and if one of the other Nodes created gets processed in a pipeline we'll
have a NPE.
Hope that helps other bug hunters a bid as I don't now how to
proceed ATM (is there a problem with non ThreadSave components?)
Giacomo
On Fri, 12 May 2006, Reinhard Poetz wrote:
Date: Fri, 12 May 2006 13:39:21 +0200
From: Reinhard Poetz <[EMAIL PROTECTED]>
Reply-To: [email protected]
To: [email protected]
Subject: CallFunctionNode problems in trunk
I'm not sure if I'm on the right track. What I found so far is that if a node
is a LinkedProcessingNodeBuilder its linkNode() method is called. When the
tree processor is set up, a node builder is registered for this step by
adding it to the linkedBuilders collection:
public ProcessingNodeBuilder createNodeBuilder
(Configuration config) throws Exception {
// FIXME : check namespace
String nodeName = config.getName();
if (getLogger().isDebugEnabled()) {
getLogger().debug("Creating node builder for " + nodeName);
}
ProcessingNodeBuilder builder;
try {
builder = (ProcessingNodeBuilder)
this.itsBuilders.select(nodeName);
} catch (ServiceException ce) {
// Is it because this element is unknown ?
if (this.itsBuilders.isSelectable(nodeName)) {
// No : rethrow
throw ce;
}
// Throw a more meaningful exception
String msg = ...
throw new ConfigurationException(msg);
}
builder.setBuilder(this);
if (builder instanceof LinkedProcessingNodeBuilder) {
this.linkedBuilders.add(builder);
}
return builder;
}
IIUC this.itsBuilders.select(...) always returns the same instance of the
CallNodeBuilder object. As the CallNodeBuilder has state (node --> a
CallFunctionNode object), the linkNode() method always operates on the same
object.
- --
Giacomo Pati
Otego AG, Switzerland - http://www.otego.com
Orixo, the XML business alliance - http://www.orixo.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
iD8DBQFEZJC7LNdJvZjjVZARApglAKDVtPNA0BfWHhl8jN+Oynp/rzVmBwCgrVMn
DSfXZODVpjM71M6Lwxb3+iU=
=Y1Wj
-----END PGP SIGNATURE-----