我对 Linux 不熟悉,所以请对我宽容一点。
我已经设置了一个运行 Apache Tomcat 的 CentOS Web 服务器。该服务器托管了一个使用 Orbeon Xforms 的 ART-DECOR webapp。
当我使用 Web 应用程序时收到一个错误,该错误在 WebApp 日志文件中留下了堆栈跟踪,如下所示。
我确信正是这个异常是由 Orbeon 引起的,并导致了这个问题。
据我所知,这是应用程序无法在服务器端读取 XML 文件的问题,因为在抛出时我无法从浏览器控制台看到任何 Web 调用。该文件似乎已就位,因此如果我的假设正确,我确信这将是一个权限问题,但我对 Tomcat 了解不够,不知道相对路径是否得到正确解析。
[root@localhost config]# pwd
/usr/share/tomcat/webapps/art-decor/WEB-INF/resources/config
[root@localhost config]# ls
feedback.xhtml prologue-servlet.xpl theme
form-builder-permissions.xml properties-local-dev.xml.template theme-error.xsl
log4j.xml properties-local-prod.xml.template theme-examples.xsl
not-found.xhtml properties-local.xml theme-main-art-decor.xsl
processors-local.xml.template properties-local.xml.template theme-plain.xsl
prologue-portlet.xpl README.txt unauthorized.xhtml
[root@localhost config]#
The error from the log file is below....
2018-12-29 13:26:54,763 ERROR ProcessorService -
+----------------------------------------------------------------------------------------------------------------------+
|An Error has Occurred |
|----------------------------------------------------------------------------------------------------------------------|
|Broken pipe |
|----------------------------------------------------------------------------------------------------------------------|
|Application Call Stack |
|----------------------------------------------------------------------------------------------------------------------|
|oxf:/config/prologue-servlet.xpl |executing processor | 41|
|······················································································································|
|element=<p:processor name="oxf:page-flow">[...]</p:processor> |
|name ={http://www.orbeon.com/oxf/processors}page-flow |
|----------------------------------------------------------------------------------------------------------------------|
|----------------------------------------------------------------------------------------------------------------------|
|Exception: java.io.IOException |
|----------------------------------------------------------------------------------------------------------------------|
|sun.nio.ch.FileDispatcherImpl |write0 |FileDispatcherImpl.java | |
|sun.nio.ch.SocketDispatcher |write |SocketDispatcher.java | 47|
|sun.nio.ch.IOUtil |writeFromNativeBuffer |IOUtil.java | 93|
|sun.nio.ch.IOUtil |write |IOUtil.java | 65|
|sun.nio.ch.SocketChannelImpl |write |SocketChannelImpl.java | 471|
|org.apache.tomcat.util.net.NioChannel |write |NioChannel.java | 134|
|org.apache.tomcat.util.net.NioBlockingSelector |write |NioBlockingSelector.java | 101|
|org.apache.tomcat.util.net.NioSelectorPool |write |NioSelectorPool.java | 144|
|apache.tomcat.util.net.NioEndpoint$NioSocketWrapper|doWrite |NioEndpoint.java |1225|
|org.apache.tomcat.util.net.SocketWrapperBase |doWrite |SocketWrapperBase.java | 743|
|org.apache.tomcat.util.net.SocketWrapperBase |writeBlocking |SocketWrapperBase.java | 513|
|org.apache.tomcat.util.net.SocketWrapperBase |write |SocketWrapperBase.java | 451|
|coyote.http11.Http11OutputBuffer$SocketOutputBuffer|doWrite |Http11OutputBuffer.java | 530|
|rg.apache.coyote.http11.filters.ChunkedOutputFilter|doWrite |ChunkedOutputFilter.java | 112|
|org.apache.coyote.http11.Http11OutputBuffer |doWrite |Http11OutputBuffer.java | 189|
|org.apache.coyote.Response |doWrite |Response.java | 599|
|org.apache.catalina.connector.OutputBuffer |realWriteBytes |OutputBuffer.java | 328|
|----------------------------------------------------------------------------------------------------------------------|
|Exception: org.apache.catalina.connector.ClientAbortException |
|----------------------------------------------------------------------------------------------------------------------|
|org.apache.catalina.connector.OutputBuffer |realWriteBytes |OutputBuffer.java | 333|
|org.apache.catalina.connector.OutputBuffer |appendByteArray |OutputBuffer.java | 728|
|org.apache.catalina.connector.OutputBuffer |append |OutputBuffer.java | 657|
|org.apache.catalina.connector.OutputBuffer |writeBytes |OutputBuffer.java | 368|
|org.apache.catalina.connector.OutputBuffer |write |OutputBuffer.java | 346|
|org.apache.catalina.connector.CoyoteOutputStream |write |CoyoteOutputStream.java | 96|
|org.orbeon.oxf.util.NetUtils |copyStream |NetUtils.java | 235|
|org.orbeon.oxf.processor.ResourceServer |serveResource |ResourceServer.java | 128|
|xf.controller.PageFlowControllerProcessor$FileRoute|process |PageFlowControllerProcessor.sc| 453|
|g.orbeon.oxf.controller.PageFlowControllerProcessor|start |PageFlowControllerProcessor.sc| 162|
|g.orbeon.oxf.processor.pipeline.PipelineProcessor$4|run |PipelineProcessor.java | 618|
|----------------------------------------------------------------------------------------------------------------------|
|Exception: org.orbeon.oxf.common.ValidationException |
|----------------------------------------------------------------------------------------------------------------------|
|org.orbeon.oxf.common.OrbeonLocationException$ |wrapException |OrbeonLocationException.scala | 60|
|org.orbeon.oxf.common.OrbeonLocationException |wrapException |OrbeonLocationException.scala | |
|g.orbeon.oxf.processor.pipeline.PipelineProcessor$4|run |PipelineProcessor.java | 620|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 680|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|start |PipelineProcessor.java | 615|
|f.processor.pipeline.choose.ConcreteChooseProcessor|start |ConcreteChooseProcessor.java | 231|
|g.orbeon.oxf.processor.pipeline.PipelineProcessor$4|run |PipelineProcessor.java | 618|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 680|
|org.orbeon.oxf.processor.pipeline.PipelineProcessor|start |PipelineProcessor.java | 615|
|org.orbeon.oxf.pipeline.InitUtils$ |runProcessor |InitUtils.scala | 82|
|org.orbeon.oxf.webapp.ProcessorService |service |ProcessorService.scala | 40|
|nServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1|apply$mcV$sp |OrbeonServlet.scala | 79|
|nServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1|apply |OrbeonServlet.scala | 72|
|nServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1|apply |OrbeonServlet.scala | 72|
|org.orbeon.oxf.util.ScalaUtils$ |withRootException |ScalaUtils.scala | 83|
|orbeon.oxf.servlet.OrbeonServlet$$anonfun$service$1|apply$mcV$sp |OrbeonServlet.scala | 72|
|orbeon.oxf.servlet.OrbeonServlet$$anonfun$service$1|apply |OrbeonServlet.scala | 72|
|orbeon.oxf.servlet.OrbeonServlet$$anonfun$service$1|apply |OrbeonServlet.scala | 72|
|org.orbeon.oxf.util.DynamicVariable |withValue |DynamicVariable.scala | 42|
|org.orbeon.oxf.servlet.OrbeonServlet |service |OrbeonServlet.scala | 71|
|javax.servlet.http.HttpServlet |service |HttpServlet.java | 741|
|org.apache.catalina.core.ApplicationFilterChain |internalDoFilter |ApplicationFilterChain.java | 231|
|org.apache.catalina.core.ApplicationFilterChain |doFilter |ApplicationFilterChain.java | 166|
|org.apache.tomcat.websocket.server.WsFilter |doFilter |WsFilter.java | 53|
|org.apache.catalina.core.ApplicationFilterChain |internalDoFilter |ApplicationFilterChain.java | 193|
|org.apache.catalina.core.ApplicationFilterChain |doFilter |ApplicationFilterChain.java | 166|
|org.apache.catalina.core.StandardWrapperValve |invoke |StandardWrapperValve.java | 199|
|org.apache.catalina.core.StandardContextValve |invoke |StandardContextValve.java | 96|
|org.apache.catalina.authenticator.AuthenticatorBase|invoke |AuthenticatorBase.java | 490|
|org.apache.catalina.core.StandardHostValve |invoke |StandardHostValve.java | 139|
|org.apache.catalina.valves.ErrorReportValve |invoke |ErrorReportValve.java | 92|
|org.apache.catalina.valves.AbstractAccessLogValve |invoke |AbstractAccessLogValve.java | 668|
|org.apache.catalina.core.StandardEngineValve |invoke |StandardEngineValve.java | 74|
|org.apache.catalina.connector.CoyoteAdapter |service |CoyoteAdapter.java | 343|
|org.apache.coyote.http11.Http11Processor |service |Http11Processor.java | 408|
|org.apache.coyote.AbstractProcessorLight |process |AbstractProcessorLight.java | 66|
|rg.apache.coyote.AbstractProtocol$ConnectionHandler|process |AbstractProtocol.java | 834|
|.apache.tomcat.util.net.NioEndpoint$SocketProcessor|doRun |NioEndpoint.java |1417|
|org.apache.tomcat.util.net.SocketProcessorBase |run |SocketProcessorBase.java | 49|
|java.util.concurrent.ThreadPoolExecutor |runWorker |ThreadPoolExecutor.java |1149|
|java.util.concurrent.ThreadPoolExecutor$Worker |run |ThreadPoolExecutor.java | 624|
|che.tomcat.util.threads.TaskThread$WrappingRunnable|run |TaskThread.java | 61|
|java.lang.Thread |run |Thread.java | 748|
+----------------------------------------------------------------------------------------------------------------------+
答案1
经过大量挖掘和调试记录,似乎 ART-DECOR 和 Orbeon 存在问题。我降级到 Orbeon 3.9,这违反了 ART-DECOR 网站上的说明。
当 ART-DECOR 网络应用程序放入 DEBUG 日志时,我发现以下异常......
2018-12-31 11:31:24,858 ERROR XFormsServer - xforms-submit-error - setting throwable {throwable: "
2018-12-31 11:31:24,858 ERROR XFormsServer - +----------------------------------------------------------------------------------------------------------------------+
2018-12-31 11:31:24,858 ERROR XFormsServer - |An Error has Occurred |
2018-12-31 11:31:24,858 ERROR XFormsServer - |----------------------------------------------------------------------------------------------------------------------|
2018-12-31 11:31:24,858 ERROR XFormsServer - |xf:submission for submission id: get-ada-apps-list-submission, error code received when submitting instance: 400 |
2018-12-31 11:31:24,858 ERROR XFormsServer - |----------------------------------------------------------------------------------------------------------------------|
2018-12-31 11:31:24,858 ERROR XFormsServer - |Application Call Stack |
2018-12-31 11:31:24,858 ERROR XFormsServer - |----------------------------------------------------------------------------------------------------------------------|
2018-12-31 11:31:24,858 ERROR XFormsServer - |----------------------------------------------------------------------------------------------------------------------|
2018-12-31 11:31:24,858 ERROR XFormsServer - |Exception: org.orbeon.oxf.xforms.submission.XFormsSubmissionException |
2018-12-31 11:31:24,858 ERROR XFormsServer - |----------------------------------------------------------------------------------------------------------------------|
2018-12-31 11:31:24,858 ERROR XFormsServer - |.orbeon.oxf.xforms.submission.XFormsModelSubmission|getReplacer |XFormsModelSubmission.java | 729|
2018-12-31 11:31:24,858 ERROR XFormsServer - |rg.orbeon.oxf.xforms.submission.RegularSubmission$1|call |RegularSubmission.java | 108|
2018-12-31 11:31:24,858 ERROR XFormsServer - |rg.orbeon.oxf.xforms.submission.RegularSubmission$1|call |RegularSubmission.java | 78|
2018-12-31 11:31:24,858 ERROR XFormsServer - |f.xforms.submission.AsynchronousSubmissionManager$1|call |AsynchronousSubmissionManager.| 110|
2018-12-31 11:31:24,858 ERROR XFormsServer - |f.xforms.submission.AsynchronousSubmissionManager$1|call |AsynchronousSubmissionManager.| 92|
2018-12-31 11:31:24,858 ERROR XFormsServer - |java.util.concurrent.FutureTask |run |FutureTask.java | 266|
2018-12-31 11:31:24,858 ERROR XFormsServer - |java.util.concurrent.Executors$RunnableAdapter |call |Executors.java | 511|
2018-12-31 11:31:24,858 ERROR XFormsServer - |java.util.concurrent.FutureTask |run |FutureTask.java | 266|
2018-12-31 11:31:24,858 ERROR XFormsServer - |java.util.concurrent.ThreadPoolExecutor |runWorker |ThreadPoolExecutor.java |1149|
2018-12-31 11:31:24,858 ERROR XFormsServer - |java.util.concurrent.ThreadPoolExecutor$Worker |run |ThreadPoolExecutor.java | 624|
2018-12-31 11:31:24,858 ERROR XFormsServer - |java.lang.Thread |run |Thread.java | 748|
2018-12-31 11:31:24,858 ERROR XFormsServer - +----------------------------------------------------------------------------------------------------------------------+"}
... 这让我想到了以下 Orbeon 帖子来提供答案... Orbeon 论坛