繁体   English   中英

WSO2 IS 服务器启动错误 - 由于 NumberFormatException,子容器在启动 java.util.concurrent.ExecutionException 期间失败

[英]WSO2 IS Server Start Error - A child container failed during start java.util.concurrent.ExecutionException due to NumberFormatException

当我尝试启动 WSO2 IS 时,我可以看到以下错误。

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

错误日志表明传递了一个字符串300ms而不是一个数字。 我可以遵循哪些步骤来解决这个问题?

当您设置的配置之一通过300ms而不是300时,会发生此错误。

通常,所有单元解析配置都位于<IS_HOME>/repository/resources/conf/unit-resolve.json文件中,并且由于您尚未在此处添加配置,因此您会收到上述错误。

您可以使用以下步骤来确定您遇到错误的地方。

  1. 转到<IS_HOME>/repository/resources/conf/default.json文件并检查任何具有值300ms的配置。
  2. 在那里你会发现唯一一个默认值为300ms的键值对是"cache.default_timeout":"300ms"
  3. 现在检查在default.json文件中使用上述键的任何引用。
  4. 您可以看到, cache.default_timeout已在多个地方使用,例如cache.authentication_context_cache.timeout, cache.authentication_request_cache.timeout, ...
  5. 接下来,在.j2模板中找到应用上述键的位置。
  6. 在上面的例子中,你可以看到键cache.authentication_context_cache.timeout, cache.authentication_request_cache.timeout, ...identity.xml.j2文件中使用了以下配置。
<CacheManager name="IdentityApplicationManagementCacheManager">
            <Cache id="framework_session_context_cache" name="AppAuthFrameworkSessionContextCache"
                   enable="{{cache.framework_session_context_cache.enable}}"
                   timeout="{{cache.framework_session_context_cache.timeout}}"
                   capacity="{{cache.framework_session_context_cache.capacity}}"
                   isDistributed="false"/>
....
</CacheManager>
  1. 由于您已经找到了使用300ms的密钥所在的确切模板,因此请转到<IS_HOME>/repository/conf目录中反映模板配置的文件。
  2. 在上面的例子中,它的<IS_HOME>/repository/conf/identity/identity.xml文件。 (因为identity.xml.j2identity.xml文件的模板)
  3. 检查该文件中的值300ms ,您会注意到类似于以下的配置。
<Cache id="authentication_error_cache" name="AuthenticationErrorCache"
   enable="true"
   timeout="300ms"
   capacity="5000"
   isDistributed="false"/>
  1. 现在我们知道出现上述错误的确切位置。

要解决上述错误,您可以采取两种方法,

方法 1 - 使用deployment.toml文件配置超时值

虽然这不是您应该使用的方法,但如果您在识别导致错误的正确 XML 标记后进行以下配置,问题就会得到解决。

对于第 9 步的情况,我们可以看到我们应该配置authentication_error_cache的超时时间。

为此,您可以将以下配置放入deployment.toml并重新启动 IS。

[cache.authentication_error_cache]
timeout=300

方法 2 - 在unit-resolve.json文件中配置超时单位

上述错误的原因是因为unit-resolve.json文件中缺少authentication_error_cache单元解析配置。

您只需将负责问题的单位添加到unit-resolve.json文件中,问题就会得到解决。

对于上述情况,您可以将以下内容添加到unit-resolve.json文件中。 "cache.authentication_error_cache.timeout": "ms",

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM