eXist-db中XSL-FO文件的验证错误(使用Jing和Jaxp)

时间:2016-03-02 12:08:43

标签: xsl-fo exist-db

我正在基于eXist-db在我的应用程序中密集测试pdfs的制作。验证方案非常简单:

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类型,试图返回文档,语法,结果,但它总是向控制台抛出相同的内容。

我使用的是eXist 3.0.RC1

1 个答案:

答案 0 :(得分:2)

这个具体问题已于2010年https://github.com/relaxng/jing-trang/commit/db858d18a8c7e6e525bd5df25b1054b7f8d26e95修复;在eXist-db中,旧的20091111版本仍在使用中。

我显然错过了@georgebina一直在维护代码库;我将尝试更新eXist-db 3.0版本的JAR文件。

我提交https://github.com/eXist-db/exist/issues/965作为提醒我。

请注意

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

是与撒克逊有关的问题,与Jing无关。