Hi everybody. I have a problem with axis2 (1.4.1) and rampart (1.3). I put a simple policy in services.xml [1] and I wrote a PasswordHandler [2]. Everything works fine if user and password are correct. When the user doesn't exist (getUser returns UserNotFoundException), the authentication process (correctly) fails, but returning a HTML error page [5] instead of a SOAP response message. The servlet engine logs an error message coming from the Axis Servlet [4], and the SOAP client, that uses a library generated by WSDL2Java, logs the error "First Element must contain the local name, Envelope , but found html" [3].
I want to return to the client a custom SOAP error message if authentication process fails. How can I do it? Thanks, Giuseppe [1] Policy <parameter name="InflowSecurity"> <action> <items>UsernameToken</items> <passwordCallbackClass> mypackage.myapp.PasswordHandler </passwordCallbackClass> </action> </parameter> [2] PasswordHandler public class PasswordHandler implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof WSPasswordCallback) { try{ WSPasswordCallback pwcb = (WSPasswordCallback) callbacks[i]; String username = pwcb.getIdentifer(); String user = getUser(username); String password = getPlainPassword(user); int passwordType = pwcb.getUsage(); if (passwordType == WSPasswordCallback.USERNAME_TOKEN) { pwcb.setPassword(password); } else { throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback"); } } catch (UserNotFoundException e){ throw new AxisFault("No user found", e.getCause()); } } } } [3] First Element must contain the local name, Envelope , but found html org.apache.axis2.AxisFault: First Element must contain the local name, Envelope , but found html at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163) at mypackage.myapp.WebservicesStub.myRemoteWS(WebservicesStub.java:6642) at mypackage.myapp.client.Client.main(Client.java:63) Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found html at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java:191) at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:172) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:156) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:105) at org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:677) at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:182) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88) ... 6 more [4] Error log GRAVE: Servlet.service() for servlet AxisServlet threw exception 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:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) [5] HTTP/1.1 500 Internal Server Error Server: Apache-Coyote/1.1 Content-Type: text/html;charset=utf-8 Content-Length: 2154 Date: Fri, 03 Jul 2009 10:47:04 GMT Connection: close <html> <head> <title>Apache Tomcat/6.0.18 - Error report</title> <style> <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head> <body> <h1>HTTP Status 500 - </h1> <HR size="1" noshade="noshade"> <p> <b>type</b> Exception report </p> <p> <b>message</b> <u></u> </p> <p> <b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u> </p> <p> <b>exception</b> <pre>java.lang.NullPointerException org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:308) org.apache.rampart.MessageBuilder.build(MessageBuilder.java:61) org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64) org.apache.axis2.engine.Phase.invoke(Phase.java:317) org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264) org.apache.axis2.engine.AxisEngine.sendFault(AxisEngine.java:520) org.apache.axis2.transport.http.AxisServlet.handleFault(AxisServlet.java:416) org.apache.axis2.transport.http.AxisServlet.processAxisFault(AxisServlet.java:379) org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:167) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)</pre> </p> <p> <b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.</u> </p> <HR size="1" noshade="noshade"> <h3>Apache Tomcat/6.0.18</h3> </body> </html> -- «The phonograph has no commercial value at all.» Thomas Edison, American inventor, 1880s.