作者:平凡简单 | 来源:互联网 | 2024-11-30 18:39
在一个长期稳定运行的生产系统中,某功能突然失效。开发团队通过日志分析,决定重启整个系统以尝试恢复服务。然而,在重启过程中遇到了 org.apache.axis2.AxisFault: Transport error: 403 Error: Forbidden
的错误,导致 Tomcat 服务器无法正常启动。由于该 Tomcat 实例上部署了多个应用程序,且短时间内未能找到有效的解决方法,最终决定暂时禁用故障功能,确保其他服务的正常运行。
系统环境如下:
- Java 版本: 1.6.0_14
- Tomcat 版本: Apache Tomcat/6.0.20
- 操作系统: Linux 2.6.32-200.13.1.el5uek
- JVM 版本: 1.6.0_14-b08
错误信息详情:
org.apache.axis2.AxisFault: Transport error: 403 Error: Forbidden
at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:310)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:200)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)
at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102)
at com.*.invokeWebService(MuZhiUtil.java:36)
at com.*.loginSMS(MuZhiUtil.java:64)
at com.*.sendSourceNoSMS(MuZhiUtil.java:108)
at com.*.etaNoticeSMS(MuZhiDao.java:452)
at com.*.execute(ETANoticeSMSJob.java:14)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
java.lang.NullPointerException
at com.*.loginSMS(MuZhiUtil.java:65)
at com.*.sendSourceNoSMS(MuZhiUtil.java:108)
at com.*.etaNoticeSMS(MuZhiDao.java:452)
at com.*.execute(ETANoticeSMSJob.java:14)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
为了解决这个问题,我们进行了以下排查步骤:
- 确认程序本身、操作系统和数据库均未发生变化,初步排除这些因素的影响。
- 将有问题的程序复制到 Windows 测试环境中,连接测试数据库,一切正常,证明问题不在程序或数据库。
- 在 Linux 测试环境中重复上述操作,同样连接测试数据库,一切正常,进一步排除操作系统的影响。
- 将程序指向生产数据库,仍然正常,再次确认数据库无问题。
- 将生产环境中的 Tomcat 和应用复制到测试环境中,重启应用时出现同样的错误,表明问题可能出在 Tomcat 配置上。
- 比较生产环境和测试环境的 Tomcat 配置文件
catalina.properties
,发现生产环境中的配置包含了代理设置,而测试环境中没有。
- 移除生产环境中的代理设置后,Tomcat 成功启动,问题得以解决。
最终查明,网管对生产环境的代理进行了修改并增加了某些限制,这导致了原本正常的应用程序出现了 403 Forbidden 错误。调整代理设置后,系统恢复正常运行。