2016-03-02 5 views
0

Я интенсивно тестирую производство pdf-файлов в своем приложении на основе eXist-db. Сценарий проверки достаточно прост:Ошибка проверки для файла XSL-FO в eXist-db (с использованием Jing и Jaxp)

let $doc := xmldb:document('/db/apps/my-app/data/test.fo') 
let $grammar := xmldb:document('/db/apps/my-app/resources/catalogs/fop.xsd') 
let $validator1 := validation:jaxp-report($doc, false(), $grammar) 
let $validator2 := validation:jing-report($doc, $grammar) 
return 
    ($validator1, $validator2) 

Результат 1:

<report> 
    <status>invalid</status> 
    <namespace>http://www.w3.org/1999/XSL/Format</namespace> 
    <duration unit="msec">135</duration> 
    <message level="Error" line="1" column="95">cvc-elt.1.a: Cannot find the declaration of element 'fo:root'.</message> 
</report> 

Результат 2:

<report> 
    <status>invalid</status> 
    <duration unit="msec">245</duration> 
    <exception> 
    <class>java.lang.NullPointerException</class> 
    <stacktrace>java.lang.NullPointerException at 
     org.apache.xerces.impl.xs.XMLSchemaLoader.resolveDocument(Unknown Source) at 
     org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar(Unknown Source) at 
     org.apache.xerces.impl.xs.XMLSchemaValidator.getGlobalElementDecl(Unknown Source) at 
     org.apache.xerces.impl.xs.SubstitutionGroupHandler.getMatchingElemDecl(Unknown Source) at 
     org.apache.xerces.impl.xs.models.XSDFACM.oneTransition(Unknown Source) at 
     org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source) at 
     org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) at 
com.thaiopensource.validate.xerces.ValidatorImpl.startElement(ValidatorImpl.java:172) at 
     org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at 
     org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at 
     org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at 
     org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at 
     org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at 
     org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at 
     org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at 
     org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at 
     org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at 
com.thaiopensource.validate.ValidationDriver.validate(ValidationDriver.java:160) at 
     org.exist.xquery.functions.validation.Jing.eval(Jing.java:164) at 
     org.exist.xquery.BasicFunction.eval(BasicFunction.java:70) at 
     org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:56) at 
     org.exist.xquery.LetExpr.eval(LetExpr.java:142) at 
     org.exist.xquery.LetExpr.eval(LetExpr.java:187) at 
     org.exist.xquery.LetExpr.eval(LetExpr.java:187) at 
     org.exist.xquery.LetExpr.eval(LetExpr.java:187) at 
     org.exist.xquery.BindingExpression.eval(BindingExpression.java:165) at 
     org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) at 
     org.exist.xquery.PathExpr.eval(PathExpr.java:267) at 
     org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) at 
     org.exist.xquery.XQuery.execute(XQuery.java:280) at 
     org.exist.xquery.XQuery.execute(XQuery.java:200) at 
     org.exist.http.servlets.XQueryServlet.process(XQueryServlet.java:492) at 
     org.exist.http.servlets.XQueryServlet.doPost(XQueryServlet.java:198) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:755) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at 
     org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) at 
     org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at 
     org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at 
     org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575) at 
     org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at 
     org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at 
     org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429) at 
     org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at 
     org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at 
     org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at 
     org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:229) at 
     org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:103) at 
     org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:50) at 
     org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:557) at 
     org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:357) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at 
     org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) at 
     org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496) at 
de.betterform.agent.web.filter.XFormsFilter.doFilter(XFormsFilter.java:171) at 
     org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1476) at 
     org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) at 
     org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at 
     org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) at 
     org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at 
     org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at 
     org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429) at 
     org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at 
     org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at 
     org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at 
     org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) at 
     org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at 
     org.eclipse.jetty.server.Server.handle(Server.java:370) at 
     org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) at 
     org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982) at 
     org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043) at 
     org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) at 
     org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at 
     org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at 
     org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696) at 
     org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53) at 
     org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at 
     org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at 
java.lang.Thread.run(Thread.java:745) </stacktrace> 
    </exception> 
</report> 

Консоль сервера:

[Fatal Error] :-1:-1: Premature end of file. 

я не могу отслеживать где проблема. Тем не менее, PDF создается через FOP плавно. Я проверил mime-типы всех файлов, попытался вернуть документ, грамматику, результаты, но он всегда бросает то же самое на консоль.

Я использую СУЩЕСТВУЕТ 3.0.RC1

+1

У Цзин всегда была «экспериментальная» поддержка XSD. См. Https://github.com/relaxng/jing-trang/blob/master/doc/jing.html и http://www.thaiopensource.com/relaxng/jing.html. Если вы хотите использовать Jing, сначала конвертируйте свою схему в RELAX NG с помощью Trang, и вы можете сделать лучше. Если вы не выполняли проверку внутри eXist, я бы предложил использовать ** focheck ** (https://github.com/AntennaHouse/focheck). Вы можете использовать версию XSD ** focheck **, но это не даст вам проверку Schematron. –

+0

Спасибо за подсказку. Что касается Trang, он не поддерживает файлы xsd в качестве входных файлов. Странная вещь - за день до того, как я провел несколько тестов с файлами Jing и xsd без каких-либо проблем. –

ответ

2

этот конкретный вопрос был зафиксирован в https://github.com/relaxng/jing-trang/commit/db858d18a8c7e6e525bd5df25b1054b7f8d26e95 в 2010 году; в eXist-db используется старая версия 20091111.

Я ясно пропустил, что @georgebina поддерживает базу кода; я попытаюсь обновить JAR-файл для выпуска eXist-db 3.0.

Я подал https://github.com/eXist-db/exist/issues/965 в качестве напоминания для меня.

Обратите внимание, что

[Fatal Error] :-1:-1: Premature end of file. 

является родственным саксонским вопросом, не относящийся к Jing.

+0

Спасибо, что касается последней ошибки, я знаю, что это саксонская вещь, но это может быть хорошим выбором для другого вопроса здесь, по времени, когда я встречаю это в своем приложении, но без видимых результатов его запуска и результатов (все файлы действует). Он мог подписать что-то более тонкое. –