}
}
Tag tag = (Tag) tagStack.pop();
if (tag != null) {
ServiceSelector tagSelector = (ServiceSelector)tagSelectorStack.pop();
try {
if (saxFragment != null) {
//start Iteration
IterationTag iterTag = (IterationTag) tag;
XMLDeserializer xmlDeserializer = null;
try {
xmlDeserializer = (XMLDeserializer) manager.lookup(XMLDeserializer.ROLE);
xmlDeserializer.setConsumer(this);
do {
xmlDeserializer.deserialize(saxFragment);
} while (iterTag.doAfterBody() != Tag.SKIP_BODY);
} catch (ServiceException e) {
throw new SAXException("lookup XMLDeserializer failed", e);
}
finally {
if (xmlDeserializer != null)
manager.release(xmlDeserializer);
}
}
tag.doEndTag(namespaceURI, localName, qName);
currentTag = tag.getParent();
if (tag == currentConsumer) {
// search next XMLConsumer
Tag loop = currentTag;
for (; loop != null; loop = loop.getParent()) {
if (loop instanceof XMLConsumer)
break;
}
if (loop != null) {
currentConsumer = (XMLConsumer) loop;
} else {
currentConsumer = this.xmlConsumer;
}
}
} finally {
getLogger().debug("endElement: release Tag");
tagSelector.release(tag);
tagNamespaceSelector.release(tagSelector);
if (transformerSelector != null && tag instanceof XMLProducer) {
getLogger().debug("endElement: release transformer");