gpt4 book ai didi

jboss - EAP 7.3 : java. lang.ClassNotFoundException: # 许可给 Apache 软件基金会 (ASF) 一个或多个 - 仅在独立模式下

转载 作者:行者123 更新时间:2023-12-04 13:53:27 29 4
gpt4 key购买 nike

我们有一个 web 应用程序 (war) 在域模式下成功部署到 JBoss EAP 7.3(使用默认配置文件),但是在独立模式下部署(基于默认的 standalone.xml 配置)它失败了:

14:47:40,342 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 88) MSC000001: Failed to start service jboss.deployment.unit."app.war".undertow-deployment: org.jboss.msc.service.StartException in service jboss.deployment.unit."app.war".undertow-deployment: java.lang.RuntimeException: javax.el.ELException: Provider # Licensed to the Apache Software Foundation (ASF) under one or more not found
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: java.lang.RuntimeException: javax.el.ELException: Provider # Licensed to the Apache Software Foundation (ASF) under one or more not found
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:254)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78)
... 8 more
Caused by: javax.el.ELException: Provider # Licensed to the Apache Software Foundation (ASF) under one or more not found
at javax.el.FactoryFinder.newInstance(FactoryFinder.java:64)
at javax.el.FactoryFinder.find(FactoryFinder.java:103)
at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:140)
at javax.el.ELUtil.getExpressionFactory(ELUtil.java:185)
at javax.el.ELManager.getExpressionFactory(ELManager.java:38)
at org.apache.jasper.runtime.JspApplicationContextImpl.<init>(JspApplicationContextImpl.java:49)
at org.apache.jasper.runtime.JspApplicationContextImpl.getInstance(JspApplicationContextImpl.java:78)
at org.apache.jasper.runtime.JspFactoryImpl.getJspApplicationContext(JspFactoryImpl.java:218)
at org.wildfly.extension.undertow.deployment.JspInitializationListener.contextInitialized(JspInitializationListener.java:51)
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:217)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:186)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:252)
... 10 more
Caused by: java.lang.ClassNotFoundException: # Licensed to the Apache Software Foundation (ASF) under one or more from [Module "deployment.app.war" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
at javax.el.FactoryFinder.newInstance(FactoryFinder.java:48)
... 29 more

14:47:40,351 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "app.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"app.war\".undertow-deployment" => "java.lang.RuntimeException: javax.el.ELException: Provider # Licensed to the Apache Software Foundation (ASF) under one or more not found
Caused by: java.lang.RuntimeException: javax.el.ELException: Provider # Licensed to the Apache Software Foundation (ASF) under one or more not found
Caused by: javax.el.ELException: Provider # Licensed to the Apache Software Foundation (ASF) under one or more not found
Caused by: java.lang.ClassNotFoundException: # Licensed to the Apache Software Foundation (ASF) under one or more from [Module \"deployment.app.war\" from Service Module Loader]"}}
在这两种情况下, war 和应用程序配置是相同的。
JBoss 配置在这两种情况下都尽可能接近。在域模式下,它基于默认配置文件,基本上只添加了一些资源。在独立模式下,它基于默认的 standalone.xml 并添加了相同的资源集。因此,从这个角度来看,我找不到行为差异的任何原因。
到目前为止,我们已将其跟踪到 tomcat-embed-el-9.0.39.jar 由于某些 3rd 方依赖性,这包括在我们的 war 中。这个 jar 里有 META-INF/services/javax.el.ExpressionFactory具有以下内容:
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

org.apache.el.ExpressionFactoryImpl
问题显然是第一行作为实际条目(例如类名)被读取和处理,即使它只是一个注释。
因此,它类似于影响 EAP 6 的以下旧问题:
https://access.redhat.com/solutions/1270603 (需要红帽登录)。
然而奇怪的是,这仅发生在独立模式下。
这可以被认为是一个错误吗?
注意:我们在 JBoss EAP 7.3.0 和 7.3.6 上对此进行了测试,结果相同。

最佳答案

这是 ExpressionFactory 之间的错误/不匹配实现和 ExpressionFactory提供程序文件 ( META-INF/services/javax.el.ExpressionFactory )。
ExpressionFactory.newInstance() method预计使用 JAR 服务 API 来查找实现类的名称:

Use the Services API (as detailed in the JAR specification). If a resource with the name of META-INF/services/javax.el.ExpressionFactory exists, then its first line, if present, is used as the UTF-8 encoded name of the implementation class.


这个描述有点模棱两可/不一致:
  • 它声称文件的第一行应该用作类名;
  • 另一方面,它说它应该使用预计会忽略注释的服务 API。

  • 在反编译我的 ExpressionFactory 时实现,我发现:
    private static String getClassNameServices(final ClassLoader tccl) {
    InputStream is = null;
    if (tccl == null) {
    is = ClassLoader.getSystemResourceAsStream("META-INF/services/javax.el.ExpressionFactory");
    }
    else {
    is = tccl.getResourceAsStream("META-INF/services/javax.el.ExpressionFactory");
    }
    if (is != null) {
    String line = null;
    BufferedReader br = null;
    InputStreamReader isr = null;
    try {
    isr = new InputStreamReader(is, "UTF-8");
    br = new BufferedReader(isr);
    line = br.readLine();
    if (line != null && line.trim().length() > 0) {
    return line.trim();
    }
    }
    // [...]
    }
    }
    此实现不会忽略注释。
    我的 META-INF/services/javax.el.ExpressionFactory (in jasper-el.jar)实际上看起来像:
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements. See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License. You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.

    org.apache.el.ExpressionFactoryImpl
    因此,它尝试加载名为“# Licensed to the Apache Software Foundation (ASF) under one or more”的类,但失败了。
    相关错误是 bug 64097并在 commit 9ed78bcc80565292cd9a343f4e6d0c2db305494e 中找到了修复程序.
    一个(可怕的)快速修复是修补 META-INF/services/javax.el.ExpressionFactory像这样的文件:
    mkdir -p META-INF/services/
    echo org.apache.el.ExpressionFactoryImpl > META-INF/services/javax.el.ExpressionFactory
    7z d ./jasper-el.jar META-INF/services/javax.el.ExpressionFactory
    jar uf ./jasper-el.jar META-INF/services/javax.el.ExpressionFactory

    关于jboss - EAP 7.3 : java. lang.ClassNotFoundException: # 许可给 Apache 软件基金会 (ASF) 一个或多个 - 仅在独立模式下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66802142/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com