openfire配置后HTTP ERROR: 500

本文介绍了解决OpenFire服务器内部错误500的方法,通过放置特定文件到正确目录来修复问题,并提供了进一步排查及部署建议。

    注意:提示错误如下:

HTTP ERROR: 500

INTERNAL_SERVER_ERROR

RequestURI=/setup/index.jsp

Caused by:

java.lang.NullPointerException

       at org.jivesoftware.admin.AdminConsole.getAppName(AdminConsole.java:122)

       at org.jivesoftware.openfire.admin.decorators.setup_jsp._jspService(setup_jsp.java:168)

       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

       at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

       at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)

       at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)

       at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)

       at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)

       at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)

       at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)

       at org.mortbay.jetty.servlet.Dispatcher.include(Dispatcher.java:192)

       at com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:156)

       at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:59)

       at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

       at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:66)

       at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

       at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:42)

       at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

       at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:70)

       at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

       at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:99)

       at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)

       at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)

       at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)

       at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)

       at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)

       at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)

       at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)

       at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)

       at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)

       at org.mortbay.jetty.Server.handle(Server.java:324)

       at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)

       at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)

       at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)

       at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)

       at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)

       at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)

       at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

Powered by Jetty://

这时因为是文件路径所导致的问题,需要将admin-sidebar.xml和openfire_i18n_en.properties这2个文件直接放在openfire/bin目录下即可解决这个问题。

如果再次出现,这样的问题,就需要将openfire目录下的你把openfire下的work 和target文件都删除了,然后重新发布一个。因为web的内容不会自动更新的,只有.class会自动更新。

同时:这两个文件务必要保留在目录下,只是拷贝出一份副本,在run环境配置好后,ant openfire(default)才可以把这两份文件打包在 target\openfire下,admin-sidebar.xml 在target\lib\openfire.jar  和 work\lib\openfire.jar中,在今后用install4j发布安装包的时候才能包装进去。

你当前的配置文件状态如下: ```bash ls -la /opt/openfire/conf/ ``` 输出: ``` -rw-r--r-- 1 openfire openfire 208 Nov 15 17:43 openfire.xml -rw------- 1 openfire openfire 0 Nov 15 17:46 security.xml ``` --- ## 🔍 问题分析 ### ❌ `security.xml` 是空文件(0 字节) ``` -rw------- 1 openfire openfire 0 Nov 15 17:46 security.xml ``` 这是导致 OpenFire 启动失败的**直接原因**。 OpenFire 在启动时会尝试从 `security.xml` 加载加密密钥、证书和安全策略。如果这个文件存在但为空,就会抛出: ``` ERROR org.jivesoftware.util.XMLProperties - Error reading XML properties org.dom4j.DocumentException: Error on line 1 of document : Premature end of file. ``` > 💡 即使内容只有 `<jive></jive>`,也不能是空文件! --- ### ⚠️ `openfire.xml` 虽非空,但可能不完整或损坏 虽然 `openfire.xml` 有 208 字节,但它可能是残缺的初始配置,也可能没有正确设置数据库选项。 --- ## ✅ 解决方案:清除损坏配置,让 OpenFire 重新生成 我们需要 **删除这两个有问题的文件**,然后以 `openfire` 用户身份启动服务,触发首次安向导。 --- ### ✅ 步骤 1:删除损坏的配置文件 ```bash sudo rm -f /opt/openfire/conf/openfire.xml /opt/openfire/conf/security.xml ``` 验证是否已删除: ```bash ls -la /opt/openfire/conf/ ``` 你应该只看到其他资源文件如 `log4j2.xml` 等,不再有 `openfire.xml` 和 `security.xml`。 --- ### ✅ 步骤 2:确保日志目录可写 ```bash sudo mkdir -p /opt/openfire/logs sudo chown -R openfire:openfire /opt/openfire/logs ``` --- ### ✅ 步骤 3:切换到 `openfire` 用户并启动服务(前台模式) ```bash sudo su - openfire cd /opt/openfire ./bin/start.sh --no-daemon ``` --- ### 🎯 成功表现 你会看到类似以下关键日志: ```text INFO [main] org.jivesoftware.openfire.XMPPServer - First time setup - creating default configuration INFO [main] org.jivesoftware.openfire.security.SecurityAuditProvider - Setting up default empty security audit plugin INFO [main] org.jivesoftware.openfire.plugin.MonitoringPlugin - Starting embedded database... INFO [main] org.hsqldb.persist.Logger - Database lock acquired on startup INFO [main] org.jivesoftware.openfire.admin.AdminConsolePlugin - Admin console listening at http://0.0.0.0:9090 ``` 并且自动创建新配置文件: ```bash ls -l /opt/openfire/conf/openfire.xml /opt/openfire/conf/security.xml ``` ✅ 输出应为: ``` -rw------- 1 openfire openfire 1234 Nov 15 18:30 openfire.xml -rw------- 1 openfire openfire 18 Nov 15 18:30 security.xml ``` 其中 `security.xml` 内容至少是: ```xml <?xml version="1.0" encoding="UTF-8"?> <jive></jive> ``` --- ### ✅ 浏览器访问向导 打开浏览器访问你的服务器地址 + 端口: 👉 http://124.71.230.244:9090 你应该看到 OpenFire 的 **安页面(Setup Wizard)**,包括: 1. 选择语言(Language Settings) 2. 设置管理员账户(Admin User Setup) 3. 数据库配置(Database Setup)→ 推荐使用 “Embedded Database” 初次测试 4. 网络设置(Profile Settings) 5. 完成安后跳转到登录页 --- ## 🔐 补充说明:为什么 `security.xml` 必须存在且非空? - `security.xml` 存储 SSL/TLS 密钥库密码、加密属性、审计日志设置等。 - OpenFire 使用 `XMLProperties` 类加载它,该类要求 XML 文件必须格式合法。 - 一个空文件会被解析器视为“格式错误”,从而中断启动流程。 --- ## ✅ 预防措施:增强 `start.sh` 脚本(推荐添加) 在你的 `start.sh` 中加入自动清理机制: ```bash # --- 清理损坏的空配置文件 --- if [ -f "$CONF_DIR/security.xml" ] && [ ! -s "$CONF_DIR/security.xml" ]; then echo "WARN: security.xml is empty, removing..." rm -f "$CONF_DIR/security.xml" fi if [ -f "$CONF_DIR/openfire.xml" ] && [ ! -s "$CONF_DIR/openfire.xml" ]; then echo "WARN: openfire.xml is empty, removing..." rm -f "$CONF_DIR/openfire.xml" fi ``` 放在 `mkdir -p "$LOG_DIR" "$CONF_DIR"` 之后即可。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值