handler.getProcessorFor(Constants.S_XSLNAMESPACEURL, "stylesheet",
"xsl:stylesheet");
handler.pushProcessor(lreProcessor);
Stylesheet stylesheet;
try
{
stylesheet = new StylesheetRoot(handler.getSchema(), handler.getStylesheetProcessor().getErrorListener());
}
catch(TransformerConfigurationException tfe)
{
throw new TransformerException(tfe);
}
// stylesheet.setDOMBackPointer(handler.getOriginatingNode());
// ***** Note that we're assigning an empty locator. Is this necessary?
SAXSourceLocator slocator = new SAXSourceLocator();
Locator locator = handler.getLocator();
if(null != locator)
{
slocator.setLineNumber(locator.getLineNumber());
slocator.setColumnNumber(locator.getColumnNumber());
slocator.setPublicId(locator.getPublicId());
slocator.setSystemId(locator.getSystemId());
}
stylesheet.setLocaterInfo(slocator);
stylesheet.setPrefixes(handler.getNamespaceSupport());
handler.pushStylesheet(stylesheet);
isLREAsStyleSheet = true;
AttributesImpl stylesheetAttrs = new AttributesImpl();
AttributesImpl lreAttrs = new AttributesImpl();
int n = attributes.getLength();
for (int i = 0; i < n; i++)
{
String attrLocalName = attributes.getLocalName(i);
String attrUri = attributes.getURI(i);
String value = attributes.getValue(i);
if ((null != attrUri) && attrUri.equals(Constants.S_XSLNAMESPACEURL))
{
stylesheetAttrs.addAttribute(null, attrLocalName, attrLocalName,
attributes.getType(i),
attributes.getValue(i));
}
else if ((attrLocalName.startsWith("xmlns:") || attrLocalName.equals(
"xmlns")) && value.equals(Constants.S_XSLNAMESPACEURL))
{
// ignore
}
else
{
lreAttrs.addAttribute(attrUri, attrLocalName,
attributes.getQName(i),
attributes.getType(i),
attributes.getValue(i));
}
}
attributes = lreAttrs;
// Set properties from the attributes, but don't throw
// an error if there is an attribute defined that is not
// allowed on a stylesheet.
try{
stylesheetProcessor.setPropertiesFromAttributes(handler, "stylesheet",
stylesheetAttrs, stylesheet);
}
catch (Exception e)
{
// This is pretty ugly, but it will have to do for now.
// This is just trying to append some text specifying that
// this error came from a missing or invalid XSLT namespace
// declaration.
// If someone comes up with a better solution, please feel
// free to contribute it. -mm
String msg = e.getMessage();
if (stylesheet.getDeclaredPrefixes() == null ||
!declaredXSLNS(stylesheet))
{
msg = msg +"; " + XSLMessages.createWarning(XSLTErrorResources.WG_OLD_XSLT_NS, null);
}
//else
throw new org.xml.sax.SAXException(msg, e);
}
handler.pushElemTemplateElement(stylesheet);
ElemTemplate template = new ElemTemplate();
appendAndPush(handler, template);
XPath rootMatch = new XPath("/", stylesheet, stylesheet, XPath.MATCH,
handler.getStylesheetProcessor().getErrorListener());
template.setMatch(rootMatch);
// template.setDOMBackPointer(handler.getOriginatingNode());
stylesheet.setTemplate(template);
p = handler.getElemTemplateElement();
excludeXSLDecl = true;
}
XSLTElementDef def = getElemDef();
Class classObject = def.getClassObject();
boolean isExtension = false;
boolean isComponentDecl = false;
boolean isUnknownTopLevel = false;
while (null != p)
{
// System.out.println("Checking: "+p);
if (p instanceof ElemLiteralResult)
{
ElemLiteralResult parentElem = (ElemLiteralResult) p;
isExtension = parentElem.containsExtensionElementURI(uri);
}
else if (p instanceof Stylesheet)
{
Stylesheet parentElem = (Stylesheet) p;
isExtension = parentElem.containsExtensionElementURI(uri);
if ((false == isExtension) && (null != uri)
&& (uri.equals(Constants.S_BUILTIN_EXTENSIONS_URL)
|| uri.equals(Constants.S_BUILTIN_OLD_EXTENSIONS_URL)))
{