skipLevel++;
// and ignore this start element
return;
}
Tag tag = null;
if (namespaceURI != null && namespaceURI.length() > 0) {
ComponentSelector tagSelector = null;
Transformer tagTransformer = null;
try {
tagSelector = (ComponentSelector) tagNamespaceSelector.select(namespaceURI);
tagSelectorStack.push(tagSelector);
// namespace matches tag library, lookup tag now.
tag = (Tag) tagSelector.select(localName);
// tag found, setup Tag and connect it to pipeline
tag.setParent(currentTag);
tag.setup(this.resolver, this.objectModel, this.parameters);
if (tag instanceof XMLProducer) {
if (transformerSelector != null) {
// add additional (Tag)Transformer to the output of the Tag
tagTransformer = (Transformer) transformerSelector.select(transformerHint);
tagTransformerStack.push(tagTransformer);
tagTransformer.setup(this.resolver, this.objectModel, null, this.parameters);
((XMLProducer) tag).setConsumer(tagTransformer);
tagTransformer.setConsumer(currentConsumer);
}
}
if (tag instanceof XMLConsumer) {
currentConsumer = (XMLConsumer) tag;
}
currentTag = tag;
// Set Tag-Attributes, Attributes are mapped to the coresponding Tag method
for (int i = 0; i < atts.getLength(); i++) {
String attributeName = atts.getLocalName(i);
String attributeValue = atts.getValue(i);
paramArray[0] = attributeValue;
try {
Method method = getWriteMethod(tag.getClass(), attributeName);
method.invoke(tag, paramArray);
} catch (Throwable e) {
if (getLogger().isInfoEnabled())
getLogger().info("startElement(" + localName + "): Attribute " + attributeName + " not set", e);
}
}
} catch (Exception ignore) {
// No namespace or tag found, process it as normal element (tag == null)
}
}
tagStack.push(tag);
if (tag == null) {
currentConsumer.startElement(namespaceURI, localName, qName, atts);
} else {
int eval = tag.doStartTag(namespaceURI, localName, qName, atts);
switch (eval) {
case Tag.EVAL_BODY :
skipLevel = 0;
if (tag instanceof IterationTag) {
// start recording for IterationTag
try {
xmlSerializer = (XMLSerializer) manager.lookup(XMLSerializer.ROLE);
currentConsumerBackup = currentConsumer;
currentConsumer = xmlSerializer;
recordingLevel = 1;
} catch (ComponentException e) {
throw new SAXException("lookup XMLSerializer failed", e);
}
}
break;
case Tag.SKIP_BODY :
skipLevel = 1;
break;
default :
String tagName = tag.getClass().getName();
getLogger().warn("Bad return value from doStartTag(" + tagName + "): " + eval);
break;
}
}
}