Замените страницу ошибки JBoss XML-ответом Axis2 fault

StackOverflow https://stackoverflow.com/questions/706079

  •  22-08-2019
  •  | 
  •  

Вопрос

Я разрабатываю веб-сервис с Axis2 1.4.1 на JBoss 4.2.3 / Tomcat 5.5.27 и Java 1.5.0 (15-b04).Это работает безупречно, но когда происходит исключение, я получаю HTML-страницу с ошибкой JBoss 500 вместо ошибки Axis2 XML / SOAP.

Такое поведение вызывает раздражение, потому что трудно обрабатывать ошибки в клиенте веб-сервиса или в 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.Я собрал его снова, убедился, что jars правильно скопированы в каталог lib, и это сработало!

Наконец, это была ошибка в аксиоме, как сказано в ссылках, предоставленных Vineet.

Спасибо!

Это было полезно?

Решение

Без подробностей об исключении я могу только предположить, что реализация веб-службы выдает исключение во время выполнения, которое не является экземпляром классов SoapFault или AxisFault (или их дочерних элементов).Поведение по умолчанию в JBoss в таком случае заключалось бы в доставке страницы ошибки в ответе, поскольку веб-службы, в конце концов, являются сервлетами.

Обычно это указывает на то, что веб-служба должна соответствующим образом обрабатывать исключения и выдавать соответствующую ошибку SOAP, чтобы предотвратить попадание исключения в стек вызовов.

Обновить

Отслеживание стека помогло бы установить первопричину этой проблемы.Но я все равно собираюсь снимать в темноте :)

Вы можете обратиться к этому вопросу КРЕПОСТНОЙ ВАЛ-164 и посмотрите, является ли это действительной причиной проблемы.Короче говоря, исходя из имеющейся информации, можно использовать SOAP 1.2.Однако я не уверен, что исправление было распространено на АКСИОМУ 1.2.8, поскольку я не видел никаких ссылок на WSCOMMONS-343.

Другие советы

В jar-файле rampart-core обнаружена ошибка.MessageBuilder в RampartSender ожидает AxisService в контексте сообщения при отправке ответа обратно клиенту.В этом случае значение null выдает исключение NullPointer.Добавьте нулевую проверку в RampartMessageData и перестройте rampart core jar и используйте его.Приложение должно работать нормально.

AxisService service = msgCtx.getAxisService();
if (service != null) {
  this.customClassLoader = msgCtx.getAxisService()
    .getClassLoader();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top