Domanda

sto sviluppando un webservice con Axis2 1.4.1 su JBoss 4.2.3 / Tomcat 5.5.27 e Java 1.5.0 (15-B04). Esso funziona perfettamente, ma quando un'eccezione accade ottengo un errore 500 pagina HTML JBoss, invece di un guasto Axis2 XML / SOAP.

Questa behavoir è fastidioso, perché difficults per gestire gli errori nel client webservice o in SoapUI durante lo sviluppo.

Posso cambiare questo per ottenere l'errore SOAP? Forse è solo un parametro Axis2 o JBoss, ma non ho trovato alcun indizio circa.

EDIT: Qui va il nuovo 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: Dopo aver dato la grazia ho scoperto che mi sbagliavo sulla versione 1.2.9-un'istantanea di Axiom. Ho costruito di nuovo, fatto in modo che i vasi in cui correttamente copiato nella directory lib e ha funzionato!

Infine, è stato un bug di Axiom, come detto nei link forniti da Vineet.

Grazie!

È stato utile?

Soluzione

Senza dettagli dell'eccezione, posso solo ipotizzare che l'implementazione del servizio web sta gettando un'eccezione di runtime che non è un'istanza del SOAPFault o classi AxisFault (oi loro figli). Il comportamento predefinito di JBoss, in tal caso, sarebbe quello di consegnare la pagina di errore nella risposta, dal momento che i servizi web sono servlet dopo tutto.

Che di solito indica che il servizio Web deve gestire le eccezioni in modo appropriato e lanciare un errore SOAP appropriata, per evitare che l'eccezione da gocciolando lo stack di chiamate.

Aggiorna

Uno stacktrace aiuterebbe a stabilire la causa principale di questo problema. Ma ho intenzione di girare al buio in ogni caso:)

È possibile fare riferimento alla questione RAMPART-164 e vedere se questo è la vera causa del problema. Per dirla in breve, dalle informazioni disponibili, si può usare SOAP 1.2. Non sono sicuro sulla correzione essere stato propagato a AXIOM 1.2.8, però, dal momento che non ho visto alcun riferimento a WSCOMMONS-343 .

Altri suggerimenti

C'è un bug nel file jar baluardo-core. MessageBuilder in RampartSender si aspetta AxisService nel contesto del messaggio durante l'invio della risposta al client. In questo caso è nullo che genera un'eccezione NullPointer. Aggiungere un controllo nullo nel RampartMessageData e ricostruire il vaso nucleo vallo e usarlo. L'applicazione dovrebbe funzionare bene.

AxisService service = msgCtx.getAxisService();
if (service != null) {
  this.customClassLoader = msgCtx.getAxisService()
    .getClassLoader();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top