【问题标题】:Replace JBoss error page with Axis2 fault XML response将 JBoss 错误页面替换为 Axis2 故障 XML 响应
【发布时间】:2009-04-01 15:35:49
【问题描述】:

我正在 JBoss 4.2.3/Tomcat 5.5.27 和 Java 1.5.0 (15-b04) 上使用 Axis2 1.4.1 开发 Web 服务。它可以完美运行,但是当发生异常时,我会收到 JBoss 错误 500 HTML 页面,而不是 Axis2 XML/SOAP 错误。

这种行为很烦人,因为在开发过程中很难处理 web 服务客户端或 SoapUI 中的错误。

我可以更改它以获取 SOAP 错误吗?也许它只是一个Axis2或JBoss参数,但我没有找到任何线索。

编辑:这是新的堆栈跟踪:

[ERROR] WSDoAllReceiver: security processing failed
org.apache.axis2.AxisFault: WSDoAllReceiver: security processing failed
    at org.apache.rampart.handler.WSDoAllReceiver.processBasic(WSDoAllReceiver.java:214)
    at org.apache.rampart.handler.WSDoAllReceiver.processMessage(WSDoAllReceiver.java:86)
    at org.apache.rampart.handler.WSDoAllHandler.invoke(WSDoAllHandler.java:72)
    at org.apache.axis2.engine.Phase.invoke(Phase.java:317)
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:163)
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.ws.security.WSSecurityException: The security token could not be authenticated or authorized
    at org.apache.ws.security.processor.UsernameTokenProcessor.handleUsernameToken(UsernameTokenProcessor.java:155)
    at org.apache.ws.security.processor.UsernameTokenProcessor.handleToken(UsernameTokenProcessor.java:53)
    at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:311)
    at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:228)
    at org.apache.rampart.handler.WSDoAllReceiver.processBasic(WSDoAllReceiver.java:211)
    ... 23 more
[ERROR] Servlet.service() para servlet AxisServlet lanzó excepción
java.lang.NullPointerException
    at org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:308)
    at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:61)
    at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64)
    at org.apache.axis2.engine.Phase.invoke(Phase.java:317)
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264)
    at org.apache.axis2.engine.AxisEngine.sendFault(AxisEngine.java:520)
    at org.apache.axis2.transport.http.AxisServlet.handleFault(AxisServlet.java:416)
    at org.apache.axis2.transport.http.AxisServlet.processAxisFault(AxisServlet.java:379)
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:167)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)

编辑 2:在给予赏金后,我发现我对 Axiom 的 1.2.9-SNAPSHOT 版本错了。我再次构建它,确保正确复制到 lib 目录的 jar 并且它工作!

最后,正如 Vineet 提供的链接中所说,这是一个 Axiom 错误。

谢谢!

【问题讨论】:

    标签: java tomcat jboss axis2


    【解决方案1】:

    如果没有异常的详细信息,我只能推测 Web 服务实现正在引发运行时异常,该异常不是 SOAPFault 或 AxisFault 类(或其子类)的实例。在这种情况下,JBoss 的默认行为是在响应中传递错误页面,因为 Web 服务毕竟是 servlet。

    这通常表明 Web 服务必须适当地处理异常并引发适当的 SOAP 错误,以防止异常在调用堆栈中涓涓细流。

    更新

    堆栈跟踪将有助于确定此问题的根本原因。但无论如何我都会在黑暗中拍摄:)

    您可以参考问题RAMPART-164,看看这是否是问题的真正原因。简而言之,从可用的信息来看,可以使用 SOAP 1.2。不过,我不确定该修复程序是否已传播到 AXIOM 1.2.8,因为我没有看到对 WSCOMMONS-343 的任何引用。

    【讨论】:

    • 很抱歉耽搁了这么久,但我正在处理其他项目。四个月前,我指的是 JBoss/Tomcat 在 500 错误中返回的 HTML 页面。我试图抛出一个 AxisFault,但它也是一样的。我正在使用带有 Rampart 模块的 Axis2 Web 服务,如果客户端未进行身份验证,这最后会引发异常。
    • 对了,有一篇关于Rampart的优秀帖子和验证用户的正确方法:blog.sweetxml.org/2007/12/…
    • 我尝试升级到 AXIOM 1.2.8,但同样失败。 Tomcat 返回其标准的 500 错误 HTML 页面,而不是 SOAP 错误响应。
    • 我要试试AXIOM主干,如markmail.org/message/lg4iuc7yiogwiqh3中所说
    【解决方案2】:

    rampart-core jar 文件中存在错误。 RampartSender 中的 MessageBuilder 在将响应发送回客户端时期望消息上下文中的 AxisService。在这种情况下,它为 null 会引发 NUllpointer 异常。在 RampartMessageData 中添加一个空检查并重建壁垒核心 jar 并使用它。该应用程序应该可以正常工作。

    AxisService service = msgCtx.getAxisService();
    if (service != null) {
      this.customClassLoader = msgCtx.getAxisService()
        .getClassLoader();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 1970-01-01
      • 2021-07-23
      • 2021-09-23
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多