Question

Je développe un webservice avec Axis2 1.4.1 sur JBoss 4.2.3 / Tomcat 5.5.27 et Java 1.5.0 (15-B04). Il fonctionne parfaitement, mais quand une exception arrive, j'obtiens une erreur JBoss 500 page HTML au lieu d'un XML Axis2 / erreur SOAP.

Cette behavoir est frustrante, car il difficults pour gérer les erreurs dans le client webservice ou SoapUI tout en développant.

Puis-je changer cela pour obtenir la faute SOAP? Peut-être juste un paramètre Axis2 ou JBoss, mais je ne trouve pas la moindre idée au sujet.

EDIT: Voici la nouvelle va stacktrace:

[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)

EDIT 2: Après avoir donné la générosité je trouve que je me suis trompé sur la version 1.2.9-SNAPSHOT d'Axiom. Je l'ai construit à nouveau, fait que les pots où correctement copiés dans le répertoire lib et cela a fonctionné!

Enfin, il a été un bug Axiom, comme on dit dans les liens fournis par Vineet.

Merci!

Était-ce utile?

La solution

Sans les détails de l'exception, je ne peux que spéculer que la mise en œuvre de services Web est de lancer une exception d'exécution qui n'est pas une instance de la SOAPFault ou des cours de AxisFault (ou leurs enfants). Le comportement par défaut dans JBoss, dans ce cas, serait de livrer la page d'erreur dans la réponse, étant donné que les services Web sont servlets après tout.

Cela indique généralement que le service Web doit gérer les exceptions de manière appropriée et jeter un défaut SOAP approprié, pour éviter l'exception de ruisselant la pile d'appel.

Mise à jour

Un stacktrace contribuerait à établir la cause de ce problème. Mais je vais tirer dans l'obscurité quand même:)

Vous pouvez vous référer à la question RAMPART-164 et voir si cela est la cause réelle du problème. Pour le mettre brièvement, à partir des informations disponibles, on peut utiliser SOAP 1.2. Je ne suis pas sûr de la solution ayant été propagée à AXIOM 1.2.8 si, puisque je ne vois aucune référence à WSCOMMONS-343 .

Autres conseils

Il y a un bug dans le fichier jar-core rampart. MessageBuilder dans RampartSender attend AxisService dans le contexte du message lors de l'envoi de la réponse au client. Dans ce cas, il est nul, qui émet une exception NullPointer. Ajouter un chèque nul dans le RampartMessageData et reconstruire le pot de noyau de rempart et l'utiliser. L'application devrait fonctionner correctement.

AxisService service = msgCtx.getAxisService();
if (service != null) {
  this.customClassLoader = msgCtx.getAxisService()
    .getClassLoader();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top