【问题标题】:Apache Karaf Cave does not work with FuseApache Karaf Cave 不适用于 Fuse
【发布时间】:2020-06-16 18:33:47
【问题描述】:

我已经为 Fuse 安装了 Cave-repository,然后我创建了一个新的存储库。当我尝试通过 http 访问存储库时,我从 undertow 收到以下错误。

注意:我没有更改 undertow 设置。它是一个默认的保险丝包。

java.lang.IllegalStateException: UT010026: 不支持异步 此请求,因为并非所有过滤器或 Servlet 都被标记为支持 异步在 io.undertow.servlet.spec.HttpServletRequestImpl.startAsync(HttpServletRequestImpl.java:1023) 在 org.apache.karaf.cave.repository.service.maven.MavenServlet.doGet(MavenServlet.java:285) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:645) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:750) 在 io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) 在 io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) 在 io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) 在 io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 在 org.ops4j.pax.web.service.undertow.internal.Context$1.lambda$wrap$0(Context.java:615) 在 io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) 在 io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) 在 io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 在 io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) 在 io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) 在 io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) 在 io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) 在 io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 在 io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:119) 在 io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) 在 io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) 在 io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) 在 io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) 在 io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) 在 io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) 在 io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) 在 io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) 在 io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) 在 io.undertow.server.Connectors.executeRootHandler(Connectors.java:376) 在 io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

我在 karaf 中使用码头尝试了相同的步骤(安装和创建洞穴存储库),一切正常。

在 google 搜索过程中,我在 redhat 中找到了以下页面,但由于订阅,我无法看到内容。 https://access.redhat.com/solutions/4222431

【问题讨论】:

  • 您没有写下您使用的是哪个 Fuse 版本。看起来像是 Fuse 7,默认使用 pax-web-undertow。 Karaf Cave 针对 pax-web-jetty 进行了测试,这是社区 Karaf 版本中的默认设置。 Undertow 和异步 servlet 可能存在一些问题 - 并非特定于 Fuse 本身...您能否使用上述堆栈跟踪在 ops4j1.jira.com/projects/PAXWEB 创建 PAXWEB 问题?
  • 是的,它是 Fuse 7.5.0。不幸的是,我无法访问 PAXWEB 项目来创建新问题。
  • 我创建了ops4j1.jira.com/browse/PAXWEB-1254 来跟踪这个

标签: apache-karaf jbossfuse undertow


【解决方案1】:

问题在于(正如我在https://ops4j1.jira.com/browse/PAXWEB-1254 下评论的那样)Cave 的MavenServlet 是使用普通HttpService.registerServlet() 注册的,而没有指定支持异步 标志。它只能在巧合的情况下与 Jetty 一起使用(正如预期的那样,对于 pax-web-tomcat 和 pax-web-undertow 不起作用)。

Karaf Cave 应该使用 Pax Web 特定的 WebContainer 扩展名到 org.osgi.service.http.HttpService 或使用注释注册 servlet。

我们将在 Karaf/Cave 项目中继续讨论。

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 2020-05-28
    • 2015-07-20
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2017-08-26
    • 2014-01-06
    相关资源
    最近更新 更多