Я интенсивно тестирую производство 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
У Цзин всегда была «экспериментальная» поддержка 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. –
Спасибо за подсказку. Что касается Trang, он не поддерживает файлы xsd в качестве входных файлов. Странная вещь - за день до того, как я провел несколько тестов с файлами Jing и xsd без каких-либо проблем. –