WSO2 IS Server启动失败:NumberFormatException引发容器启动异常
WSO2 Identity Server启动失败:NumberFormatException("300ms") 解决步骤
错误日志
TID: [-1234] [] [2022-12-05 21:31:08,401] [] ERROR {org.apache.catalina.core.ContainerBase} - A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [TenantContextRewriteValve[StandardEngine[Catalina].StandardHost[localhost]]] at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:926) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.wso2.carbon.tomcat.ext.service.ExtendedStandardService.startInternal(ExtendedStandardService.java:52) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:927) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.wso2.carbon.tomcat.internal.CarbonTomcat.start(CarbonTomcat.java:113) at org.wso2.carbon.tomcat.internal.ServerManager$1.run(ServerManager.java:167) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.apache.catalina.LifecycleException: Failed to start component [TenantContextRewriteValve[StandardEngine[Catalina].StandardHost[localhost]]] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:176) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) ... 9 more Caused by: java.lang.NumberFormatException: For input string: "300ms" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:652) at java.base/java.lang.Integer.parseInt(Integer.java:770) at org.wso2.carbon.identity.core.util.IdentityConfigParser.buildCacheConfig(IdentityConfigParser.java:278) at org.wso2.carbon.identity.core.util.IdentityConfigParser.buildConfiguration(IdentityConfigParser.java:177) at org.wso2.carbon.identity.core.util.IdentityConfigParser.<init>(IdentityConfigParser.java:74) at org.wso2.carbon.identity.core.util.IdentityConfigParser.getInstance(IdentityConfigParser.java:81) at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.getContextsToRewrite(TenantContextRewriteValve.java:134) at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.startInternal(TenantContextRewriteValve.java:61) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ... 20 more
问题分析
日志明确显示,IdentityConfigParser在解析缓存配置时,试图将带时间单位的字符串"300ms"转换为整数,触发了NumberFormatException。该版本的WSO2 IS缓存配置仅接受纯数字(代表毫秒数),不支持带单位的格式。
解决步骤
- 定位配置文件:打开WSO2 IS安装目录下的
repository/conf/identity/identity.xml文件。 - 查找错误配置:搜索包含"300ms"的配置项,这类配置通常属于缓存超时(如
CacheTimeout)相关字段。 - 修正格式:将带单位的"300ms"改为纯数字
300(若原本意图就是300毫秒),确保所有缓存相关配置值均为无单位的整数。 - 验证其他配置:遍历文件中所有缓存配置项,确认没有其他带时间单位的字符串格式值。
- 重启服务:保存修改后的配置文件,重新启动WSO2 Identity Server,检查启动是否正常。
内容的提问来源于stack exchange,提问作者Nipuna Upeksha
相关产品推荐
相关产品推荐

