Саксон: не могу открыть XML со схемой в .NET, отлично работает в Java - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь создать саксонский XPathCompiler. У меня один и тот же код в Java и .NET, каждый из которых вызывает соответствующую библиотеку Saxon. Код:

protected void ctor(InputStream xmlData, InputStream schemaFile, boolean preserveWhiteSpace) throws SAXException, SchemaException, SaxonApiException {
    this.rootNode = makeDataSourceNode(null);
    XMLReader reader = XMLReaderFactory.createXMLReader();

    InputSource xmlSource = new InputSource(xmlData);
    SAXSource saxSource = new SAXSource(reader, xmlSource);
    Source schemaSource = new StreamSource(schemaFile);
    Configuration config = createEnterpriseConfiguration();
    config.addSchemaSource(schemaSource);
    // ...

В случае .NET InputStreams - это класс, который переносит .NET Stream и делает его Java InputStream. Для Java приведенный выше код работает нормально. Но в .NET последняя строка config.addSchemaSource (schemaSource) выдает:

$ exception {"Содержимое запрещено в пролог. "} org.xml.sax.SAXParseException

В Java и .NET все работает нормально, если нет схемы.

Используются следующие файлы: http://www.thielen.com/test/SouthWind.xml & http://www.thielen.com/test/SouthWind.xsd

Похоже, что в этом вопросе нет никаких проблем. И если это было проблемой, разве у Java и .NET не должно быть одинаковых проблем.

Я думаю, может быть, это оболочка для .NET Stream, чтобы сделать его Java InputStream, но мы используем этот класс везде без каких-либо проблем.

1 Ответ

0 голосов
/ 25 июня 2018

Исключение "содержание не разрешено в Прологе" абсолютно бесит - если бы только оно сообщило вам, на какие байты он жалуется!Одним из методов диагностики является отображение начальных байтов, доставленных InputStream: сделать несколько вызовов на

System.err.println(schemaFile.next())

Моим первым предположением относительно причины будет что-то, связанное с метками порядка байтов, а не спекуляция,Я бы сосредоточился на диагностике, чтобы увидеть, что анализатор видит в этом InputStream, который ему не нравится.

...