Thomas Scheffler created XALANJ-2604:
----------------------------------------
Summary: URIResolver is not used for document() function
Key: XALANJ-2604
URL: https://issues.apache.org/jira/browse/XALANJ-2604
Project: XalanJ2
Issue Type: Bug
Security Level: No security risk; visible to anyone (Ordinary problems in
Xalan projects. Anybody can view the issue.)
Components: XSLTC
Affects Versions: 2.7.2
Environment: register custom URIResolver that features a new protocoll
(e.g. 'foo') in org.apache.xalan.xsltc.trax.TransformerFactoryImpl
Reporter: Thomas Scheffler
Assignee: Steven J. Hathaway
Priority: Blocker
If you want to use a custom URIResolver XSLTC does not call it when the
document() function is used:
{noformat}
org.xml.sax.SAXException: org.apache.xalan.xsltc.TransletException:
org.apache.xml.utils.WrappedRuntimeException: unknown protocol: foo
javax.xml.transform.TransformerException:
org.apache.xalan.xsltc.TransletException:
org.apache.xml.utils.WrappedRuntimeException: unknown protocol: foo
at
org.apache.xalan.xsltc.trax.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:243)
at
org.apache.xerces.parsers.AbstractSAXParser.endDocument(AbstractSAXParser.java:734)
at
org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(XMLDocumentScannerImpl.java:525)
at
org.apache.xerces.impl.XMLEntityManager.endEntity(XMLEntityManager.java:1938)
at
org.apache.xerces.impl.XMLEntityScanner.load(XMLEntityScanner.java:1773)
at
org.apache.xerces.impl.XMLEntityScanner.skipSpaces(XMLEntityScanner.java:1304)
at
org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(XMLDocumentScannerImpl.java:1239)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:875)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108)
at
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1198)
at
org.mycore.common.content.transformer.MCRXSL2JAXBTransformer.getJAXBObject(MCRXSL2JAXBTransformer.java:94)
at
org.mycore.common.content.transformer.MCRXSL2JAXBTransformer.getJAXBObject(MCRXSL2JAXBTransformer.java:111)
at
org.mycore.solr.index.document.MCRSolrTransformerInputDocumentFactory.getDocument(MCRSolrTransformerInputDocumentFactory.java:74)
at
org.mycore.solr.index.handlers.content.MCRSolrMCRContentIndexHandler.index(MCRSolrMCRContentIndexHandler.java:77)
... 8 more
Caused by: javax.xml.transform.TransformerException:
org.apache.xalan.xsltc.TransletException:
org.apache.xml.utils.WrappedRuntimeException: unknown protocol: foo
at
org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:632)
at
org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:299)
at
org.apache.xalan.xsltc.trax.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:240)
... 23 more
Caused by: org.apache.xalan.xsltc.TransletException:
org.apache.xml.utils.WrappedRuntimeException: unknown protocol: foo
at
org.apache.xalan.xsltc.dom.LoadDocument.documentF(LoadDocument.java:140)
at mir_solrbase.topLevel()
at mir_solrbase.transform()
at
org.apache.xalan.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:605)
at
org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:628)
... 25 more
{noformat}
after digging into the {{WrappedRuntimeException}}, I found this source
StackTrace:
{noformat}
java.net.MalformedURLException: unknown protocol: foo
at java.net.URL.<init>(URL.java:600)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at
org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:964)
at
org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:144)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:832)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108)
at
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1198)
at
org.apache.xalan.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:389)
at
org.apache.xalan.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:194)
at
org.apache.xalan.xsltc.dom.LoadDocument.document(LoadDocument.java:201)
at
org.apache.xalan.xsltc.dom.LoadDocument.document(LoadDocument.java:148)
at
org.apache.xalan.xsltc.dom.LoadDocument.documentF(LoadDocument.java:131)
at mir_solrbase.topLevel()
at mir_solrbase.transform()
at
org.apache.xalan.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:605)
at
org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:628)
at
org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:299)
at
org.apache.xalan.xsltc.trax.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:240)
at
org.apache.xerces.parsers.AbstractSAXParser.endDocument(AbstractSAXParser.java:734)
at
org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(XMLDocumentScannerImpl.java:525)
at
org.apache.xerces.impl.XMLEntityManager.endEntity(XMLEntityManager.java:1938)
at
org.apache.xerces.impl.XMLEntityScanner.load(XMLEntityScanner.java:1773)
at
org.apache.xerces.impl.XMLEntityScanner.skipSpaces(XMLEntityScanner.java:1304)
at
org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(XMLDocumentScannerImpl.java:1239)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:875)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108)
at
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1198)
{noformat}
Here is the erroneous code of {{org.apache.xalan.xsltc.dom.LoadDocument}}
{code:title=LoadDocument.java;line=196-204}
// Parse the input document and construct DOM object
// Trust the DTMManager to pick the right parser and
// set up the DOM correctly.
XSLTCDTMManager dtmManager = (XSLTCDTMManager)multiplexer
.getDTMManager();
DOMEnhancedForDTM enhancedDOM =
(DOMEnhancedForDTM) dtmManager.getDTM(new StreamSource(uri),
false, null, true, false,
translet.hasIdCall(), cacheDOM);
{code}
You clearly see that a hard-coded {{StreamSource}} is used and not the source
provided by the {{URIResolver}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]