2009-04-01 9 views
0

Ich entwickle einen Webservice mit Axis2 1.4.1 auf JBoss 4.2.3/Tomcat 5.5.27 und Java 1.5.0 (15-b04). Es funktioniert einwandfrei, aber wenn eine Ausnahme auftritt, bekomme ich eine JBoss-Fehler 500 HTML-Seite anstelle eines Axis2 XML/SOAP-Fehlers.JBoss-Fehlerseite durch Axis2-Fehler ersetzen XML-Antwort

Dieses Verhalten ist ärgerlich, weil es schwierig ist, Fehler im Webservice-Client oder in SoapUI während der Entwicklung zu behandeln.

Kann ich dies ändern, um den SOAP-Fehler zu bekommen? Vielleicht ist es nur ein Axis2- oder JBoss-Parameter, aber ich habe keine Ahnung davon gefunden.

EDIT: Hier geht die neue 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: Nach der Prämie geben fand ich, dass ich falsch über 1.2.9-SNAPSHOT Version von Axiom war. Ich habe es erneut erstellt, habe sichergestellt, dass die Gläser korrekt in das lib-Verzeichnis kopiert wurden, und es hat funktioniert!

Schließlich war es ein Axiom-Fehler, wie in den Links von Vineet gesagt.

Danke!

Antwort

1

Ohne Details der Ausnahme kann ich nur spekulieren, dass die Web-Service-Implementierung eine Laufzeit-Ausnahme auslöst, die keine Instanz der SOAPFault- oder AxisFault-Klassen (oder ihrer Child-Klassen) ist. Das Standardverhalten in JBoss wäre in einem solchen Fall, die Fehlerseite in der Antwort zu liefern, da Web-Services schließlich Servlets sind.

Dies bedeutet normalerweise, dass der Webdienst die Ausnahmen entsprechend behandeln und einen entsprechenden SOAP-Fehler auslösen muss, um zu verhindern, dass die Ausnahme den Aufrufstapel aufräumt.

aktualisieren

A Stacktrace bei der Festlegung der Ursache dieses Problems helfen würde. Aber ich werde sowieso im Dunkeln schießen :)

Sie können auf das Problem RAMPART-164 verweisen und sehen, ob das die eigentliche Ursache des Problems ist. Um es kurz zu machen, kann man aus den verfügbaren Informationen SOAP 1.2 verwenden. Ich bin mir nicht sicher, ob das Update auf AXIOM 1.2.8 übertragen wurde, da ich keinen Hinweis auf WSCOMMONS-343 sah.

+0

Entschuldigung für die große Verzögerung, aber ich arbeitete an anderen Projekten. Vor vier Monaten meinte ich die HTML-Seite, die von JBoss/Tomcat in 500 Fehlern zurückgegeben wurde. Ich habe versucht, stattdessen einen AxisFault zu werfen, aber es tut das gleiche. Ich arbeite mit einem Axis2-Webservice mit Rampart-Modul und dieser letzte löst eine Ausnahme aus, wenn der Client nicht authentifizieren. – Dario

+0

Übrigens gibt es eine ausgezeichnete Post über Rampart und die korrekte Art, Benutzer zu authentifizieren: http://blog.sweetxml.org/2007/12/rampart-basic-examples-show-you-add-ws.html – Dario

+0

Sieht so aus, als ob du nicht der einzige bist: http://www.mail-archive.com/[email protected]/msg47665.html –

0

Es gibt einen Fehler in der Rampart-Core-JAR-Datei. MessageBuilder in RampartSender erwartet AxisService im Nachrichtenkontext, während die Antwort zurück an den Client gesendet wird. In diesem Fall ist es null, das eine NUllpointer-Ausnahme auslöst. Fügen Sie in RampartMessageData einen Null-Check hinzu und erstellen Sie das Wall-Core-Jar neu und verwenden Sie es. Die Anwendung sollte gut funktionieren.