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.
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
___________________________________________________________
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de