Да, я знаю, что общие формы этого вопроса задавались снова и снова. Однако я не смог найти ничего, что помогло бы мне решить мою проблему, поэтому я публикую этот вопрос, который конкретно касается моей проблемы.
Я пытаюсь выяснить, почему я получаю SAXParseException
(Content is not allowed in prolog.
), поскольку библиотека OpenSAML пытается проанализировать некоторый XML. Самые полезные подсказки, которые я нашел, указывают на ошибочную спецификацию в начале файла, но ничего подобного нет. Я также написал простую подпрограмму для C # .NET, которая считывает весь файл как массив байтов, перебирает его и говорит мне, был ли какой-либо из них> = 0x80 (он не нашел ни одного). XML помечен как utf-8. Я надеюсь, что кто-то может дать мне немного понимания того, что может пойти не так.
Начальная часть XML-файла, как шестнадцатеричный дамп, (обратите внимание на использование 0A
в качестве новой строки; полное удаление символа перевода строки не имеет видимого эффекта):
000000000 3C 3F 78 6D 6C 20 76 65-72 73 69 6F 6E 3D 22 31 |<?xml version="1|
000000010 2E 30 22 20 65 6E 63 6F-64 69 6E 67 3D 22 55 54 |.0" encoding="UT|
000000020 46 2D 38 22 3F 3E 0A 3C-6D 64 3A 45 6E 74 69 74 |F-8"?>.<md:Entit|
000000030 79 44 65 73 63 72 69 70-74 6F 72 20 78 6D 6C 6E |yDescriptor xmln|
000000040 73 3A 6D 64 3D 22 75 72-6E 3A 6F 61 73 69 73 3A |s:md="urn:oasis:|
000000050 6E 61 6D 65 73 3A 74 63-3A 53 41 4D 4C 3A 32 2E |names:tc:SAML:2.|
000000060 30 3A 6D 65 74 61 64 61-74 61 22 20 |0:metadata" |
Трассировка стека для исключительной причины:
org.xml.sax.SAXParseException: Content is not allowed in prolog.
org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
org.opensaml.xml.parse.BasicParserPool$DocumentBuilderProxy.parse(BasicParserPool.java:665)
my.Unmarshaller.unmarshall(Unmarshaller.java:39)
... internal calls omitted for brevity ...
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Код, который пытается выполнить unmarshalling (имена типов полностью определены здесь; надеюсь, я не пропускаю что-то важное):
package my;
public class Unmarshaller {
protected static org.opensaml.xml.parse.ParserPool parserPool;
static {
org.opensaml.xml.parse.BasicParserPool _parserPool;
_parserPool = new org.opensaml.xml.parse.BasicParserPool();
_parserPool.setNamespaceAware(true);
Unmarshaller.parserPool = _parserPool;
}
public Unmarshaller() {
try {
org.opensaml.DefaultBootstrap.bootstrap();
} catch (org.opensaml.xml.ConfigurationException e) {
throw new java.lang.RuntimeException (e);
}
}
public Object unmarshall(String xml)
throws org.opensaml.xml.io.UnmarshallingException {
assert xml != null;
assert !xml.isEmpty();
assert Unmarshaller.parserPool != null;
org.w3c.dom.Document doc;
try {
doc =
(parserPool.getBuilder())
.parse( // <<<====== line 39 in original source code is here
new org.xml.sax.InputSource(
new java.io.StringReader(xml)
)
);
} catch (org.xml.sax.SAXException e) {
throw new org.opensaml.xml.io.UnmarshallingException(e);
} catch (java.io.IOException e) {
throw new org.opensaml.xml.io.UnmarshallingException(e);
} catch (org.opensaml.xml.parse.XMLParserException e) {
throw new org.opensaml.xml.io.UnmarshallingException(e);
}
// ... remainder of function omitted for brevity ...
}
}