我遵循了xnat站点(https://wiki.xnat.org/documentation/getting-started-with-xnat/xnat-installation-guide)上的在线文档,并安装了ApacheTomcat9(版本9.0.75,JVM版本:1.8.0_372_b07,JVM供应商:Temurin).但是,当我在xnat Web应用程序上点击‘开始’时,我得到了错误:

FAIL - Application at context path [/xnat-web-1.8.8] could not be started
FAIL - Encountered exception [org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@35a50a4c]]

日志(log)文件显示以下内容(截断以允许在此处发布):


... org.apache.catalina.core.ApplicationContext.log HTMLManager: Error starting [/xnat-web-1.8.8]
        org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@6dde5c8c]
                at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
              
...
...
...
                at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.lang.Thread.run(Thread.java:750)
        Caused by: java.lang.NullPointerException
                at java.lang.String.startsWith(String.java:1405)
                at java.lang.String.startsWith(String.java:1434)
                at org.apache.catalina.webresources.AbstractFileResourceSet.file(AbstractFileResourceSet.java:98)
                at org.apache.catalina.webresources.DirResourceSet.getResource(DirResourceSet.java:94)
                at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:272)
                at org.apache.catalina.webresources.Cache.getResource(Cache.java:64)
                at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:211)
                at org.apache.catalina.webresources.StandardRoot.listResources(StandardRoot.java:347)
                at org.apache.catalina.webresources.StandardRoot.processWebInfLib(StandardRoot.java:585)
                at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:722)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

根据ChatGPT的数据:

Based on the provided log file, it appears that there is an error during the deployment of the web application '/xnat-web-1.8.8' in Tomcat. The error message indicates a NullPointerException and a LifecycleException related to the StandardRoot component.

The root cause of the issue seems to be the NullPointerException occurring within the AbstractFileResourceSet class. It specifically fails when attempting to access a file resource, likely due to a missing or invalid file path.

我想知道这个问题是在单元文件中还是在PostgreSQL配置(TCP/IP连接)设置中.我只在本地主机上使用Tomcat.在我的pg_hba.conf文件中,我刚刚添加了行listen_addresses = '*' 如果你看下面的单元文件,我已经给了它多个文件夹来读写.默认情况下,Tomcat使用/opt/tomcat.但是xnat文档设置表明我使用/var/lib/tomcat、/var/log/tomcat和/etc/tomcat/Catalina作为ReadWritePath.我刚刚在我的单元文件中添加了所有这些以及我的安装默认路径.我想知道这是否就是错误所在. 我的Tomcat单元文件是:


[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=xnat
Group=xnat
PrivateTmp=yes
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS="-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Dxnat.home=/data/xnat/home"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
#AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat
CacheDirectoryMode=750
#ProtectSystem=strict
ReadWritePaths=/etc/tomcat/Catalina/
ReadWritePaths=/opt/tomcat/webapps/
ReadWritePaths=/var/lib/tomcat/webapps/
ReadWritePaths=/opt/log/tomcat/
ReadWritePaths=/var/log/tomcat/
ReadWritePaths=/data/xnat/home
ReadWritePaths=/home/xnat/
[Install]
WantedBy=multi-user.target

/opt/tomcat/webapp/xnat-1.8.8/META-INF下的context.xml文件是:

xml version="1.0" encoding="utf-8"?>
<!--
  ~ web: context.xml
  ~ XNAT http://www.xnat.org
  ~ Copyright (c) 2005-2021, Washington University School of Medicine and Howard Hughes Medical Institute
  ~ All Rights Reserved
  ~
  ~ Released under the Simplified BSD.
  -->

<Context>
    <!--
    For Tomcat 7 compatibility, uncomment the <Loader> element and comment out the <Resources>
    and <CookieProcessor> elements under that.
    -->
    <!-- Loader className="org.apache.catalina.loader.VirtualWebappLoader" searchVirtualFirst="true" virtualClasspath="${xnat.home}/plugins/*.jar"/ -->

    <!--
    For Tomcat 8 compatibility, uncomment the <Resources> and <CookieProcessor> elements below and
    comment out the <Loader> element below that.
    -->
    <Resources>
        <PreResources className="org.apache.catalina.webresources.DirResourceSet" base="${xnat.home}/plugins" webAppMount="/WEB-INF/lib" />
    </Resources>
    <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
    <JarScanner scanAllDirectories="true" />
    <Parameter name="xnatHome" value="${xnat.home}"/>
    <Manager pathname="" />
</Context>

从那以后,我也试图通过流浪者和 docker 部署xnat,但没有成功. 如果你能给我任何帮助,我将不胜感激.

推荐答案

在我看来,这个问题与Tomcat无法正确处理context.xml文件中定义的应用程序资源有关:

<Resources>
  <PreResources className="org.apache.catalina.webresources.DirResourceSet" base="${xnat.home}/plugins" webAppMount="/WEB-INF/lib" />
</Resources>

其原因很可能是未成功解析${xnat.home}占位符,可能是因为没有正确定义同名的系统属性.

在定义CATALINA_OPTS环境变量时,您正在try 在单元文件中定义系统属性:

Environment="CATALINA_OPTS="-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Dxnat.home=/data/xnat/home"

请注意,它的定义不正确,请注意CATALINA_OPTS=后面的".

它应该是:

Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Dxnat.home=/data/xnat/home"

这可能是一个打字错误,但它也可以解释这个问题.

Java相关问答推荐

有没有方法可以修复错误错误:无法初始化主类code_editor?

Java中Stream(java.util.stream)和linkedList数据 struct 之间是什么关系?

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

使用包私有构造函数强制子类Java类

如何在SystemiccationRetryListenerSupport中获得类级别的spring retryable annotation中指定的标签?

AlarmManager没有在正确的时间发送alert

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

为什么JAVA&S清洁器使用链表而不是并发HashSet?

将关键字与正文中的_Allowed匹配,但带有__Signing可选后缀

测试容器无法加载类路径初始化脚本

如何使用Jackson将XML元素与值和属性一起封装

我可以在MacOS上使用什么Java函数来在适当的设备上以适当的音量播放适当的alert 声音?

未找到适用于响应类型[类java.io.InputStream]和内容类型[Text/CSV]的HttpMessageConverter

Java中将文本拆分为数字或十进制数字和字符串

%This内置函数示例

Cordova Android Gradle内部版本组件不兼容

使IntelliJ在导入时优先 Select 一个类或将另一个标记为错误

java.lang.ClassCastException:com.google.firebase.FirebaseException无法转换为com.google.fire base.auth.FirebaseAuthException

javax.crypto-密码对象-提供者服务是如何工作的?

为什么当我输入变量而不是直接输入字符串时,我的方法不起作用?