I am reposting this once more w/ hopes that one of the Axis wizards might give me some advice. I'm really stumped on this one... Thanks, -- Chris
---------- Forwarded message ---------- From: Chris Berry <[EMAIL PROTECTED]> Date: Jun 26, 2006 7:55 AM Subject: Building a SOAPFaultHandler To: [email protected] Greetings, I'm struggling to build an Axis Handler which modifies a SOAPFault on it's way back out to the Client. I want to add a bit of generic information (e.g. hostname, svcname, timestamp, etc.) to the SOAPFault (i.e. to the faultstring and faultactor) o assist my Client's in their debugging. Unfortunately I am not able to actually modify what the Client sees, although I can see the Message is changed locally. Is this even possible?? It appears that the Message is read-only at this point?? Below is the code I'm using. Does anyone have any ideas for me?? Am I just doing something silly?? Thanks, -- Chris public class ErrorHandler extends BasicHandler { //------------------------------------ public void invoke( MessageContext msgContext ) throws AxisFault { try { /* do nothing */ } catch ( Exception e ) { errlog.error( e ); throw AxisFault.makeFault( e ); } } //------------------------------------ public void onFault(MessageContext msgContext) { try { addFaultDetails( msgContext ); logError( msgContext ); } catch ( Exception ee ) { errlog.error( "An additional error occured while processing onFault()", ee ); } } //------------------------------------ public void addFaultDetails( MessageContext msgContext ) { try { if ( msgContext == null ) return; // EXIT SOAPMessage msg = msgContext.getMessage(); if ( msg == null ) return; // EXIT SOAPBody body = msg.getSOAPBody(); if ( body == null ) return; // EXIT SOAPFault fault = (SOAPFault)(body.getFault()); if ( fault == null ) return; // EXIT // send back hostname, timestamp, svcname as part of the // "faultcode/faultstring/faultactor" fields.. String targetService = msgContext.getTargetService(); if ( targetService == null ) targetService = "UNKNOWN_SVC"; String operation = "UNKNOWN_OP"; if ( msgContext.getOperation() != null && msgContext.getOperation().getName() != null ) operation = msgContext.getOperation().getName(); String svcname = targetService + "." + operation; String timestamp = (new Date()).toString(); String hostname = java.net.Inet4Address.getLocalHost().getHostName(); String faultString = fault.getFaultString(); faultString = "SOAPFault @ <" + timestamp + "> = " + faultString; fault.setFaultString( faultString ); String faultActor = fault.getFaultActor(); fault.setFaultActor( "[" + svcname + "] @ (" + hostname + ") " + faultActor ); SOAPEnvelope env = new SOAPEnvelope(); env.clearBody(); env.addBodyElement(fault); Message respMsg = new Message(env); msgContext.setResponseMessage(respMsg); } catch ( Exception ee ) { errlog.error( "An additional error occured while processing onFault()", ee ); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
