【问题标题】:WSO2 IS Server Start Error - A child container failed during start java.util.concurrent.ExecutionException due to NumberFormatExceptionWSO2 IS 服务器启动错误 - 由于 NumberFormatException,子容器在启动 java.util.concurrent.ExecutionException 期间失败
【发布时间】:2022-12-17 21:12:18
【问题描述】:

当我尝试启动 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,而不是数字。我可以遵循哪些步骤来解决这个问题?

【问题讨论】:

    标签: wso2 wso2-identity-server


    【解决方案1】:

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

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

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

    1. 转到&lt;IS_HOME&gt;/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 的密钥所在的确切模板,请转至&lt;IS_HOME&gt;/repository/conf 目录中反映模板配置的文件。
      2. 在上面的例子中,它是&lt;IS_HOME&gt;/repository/conf/identity/identity.xml 文件。 (因为identity.xml.j2是identity.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",

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      相关资源
      最近更新 更多