【问题标题】:Oracle Service Bus error: ClassCastException: CountingRequestWrapper cannot be cast to ServletRequestImplOracle Service Bus 错误:ClassCastException:无法将 CountingRequestWrapper 强制转换为 ServletRequestImpl
【发布时间】:2021-10-25 21:13:22
【问题描述】:

我为 Oracle Service Bus 开发了一项服务并部署在 WebLogic 12c 服务器上。代理服务使用 HTTP 适配器,以便可以使用 SOAP 调用该服务。业务服务使用 REST 适配器。

当我使用从 ServiceBus 控制台调用的测试页面在集成服务器或 UAT 服务器(即 WebLogic 12c)上对其进行测试时,该服务运行良好。还尝试在两台不同的 Windows PC 上使用 SOAPUI 工具。

但是,当第三方调用我的服务时,我的日志中出现异常。我在管道中添加了警报和日志,但它们都没有被调用,这意味着异常在 WebLogic 中发生,然后它才能将请求传递给我的适配器。

谷歌搜索“CountingRequestWrapper”的结果为零。我真的不知道是什么原因造成的。

这是日志:

module:/MyApp/MyService path:null spec-version:3.1], request: weblogic.servlet.internal.ServletRequestImpl@35881271[
GET /MyApp/MyService?wsdl HTTP/1.1
Content-Type: text/xml;charset="utf-8"
Accept: /
Connection: Keep-Alive

]] Root cause of ServletException.
java.lang.ClassCastException: com.bea.wli.sb.transports.http.wls.CountingRequestWrapper cannot be cast to weblogic.servlet.internal.ServletRequestImpl
        at com.bea.wli.sb.transports.http.wls.HttpTransportServlet.service(HttpTransportServlet.java:121)
        at weblogic.servlet.FutureResponseServlet.service(FutureResponseServlet.java:24)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:295)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:353)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

我确实注意到在顶部它说:路径:空。会不会跟这个有关?

【问题讨论】:

    标签: weblogic12c osb


    【解决方案1】:

    来自日志的请求看起来像 GET 到 wsdl 地址(GET /MyApp/MyService?wsdl),您提到它是一个肥皂代理,因此很可能是一个 POST 到服务端点地址。我建议先检查第 3 方客户端配置。

    【讨论】:

    • 是的,这也让我很生气。 SOAP 调用必须是 POST 才能携带有效负载。不幸的是,客户正在使用第三方应用程序,并且不熟悉编程问题。他们只知道运行他们的应用程序的最低要求。将尝试再次询问他们。
    • 根据stackoverflow.com/questions/26339317/…可以使用GET调用SOAP。这对我来说是一个新的。
    • 更新:根据客户端,他们没有发送服务请求,而是发送了服务发现请求,因此使用了 GET 方法。这样的请求应该得到 wsdl 的响应。从浏览器或 Postman/SoapUI 调用它确实会显示 wsdl。现在,问题是为什么这会在客户端的应用程序发送时产生异常。
    • "Accept: /" 您日志中的标头看起来很奇怪,您可以在邮递员中强制它并尝试在抓取 wsdl 时重现该问题吗?
    • 那里应该有星号:接受/。我猜他们在复制/粘贴过程中掉到了某个地方。我已经尝试了在 Postman 和 SoapUI 中我能想到的所有组合,但我所做的一切都不会产生该异常。编辑:我在评论中输入了星号,但它们也消失了。 */*
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多