From: Thomas D. <tdi...@us...> - 2004-08-18 20:51:45
|
User: tdiesler Date: 04/08/18 13:51:38 Modified: src/main/org/jboss/webservice/handler ClientHandlerChain.java HandlerChainBaseImpl.java ServerHandlerChain.java Log: Add a check for unprocessed mustUnderstand headers. Revision Changes Path 1.3 +20 -1 webservice/src/main/org/jboss/webservice/handler/ClientHandlerChain.java Index: ClientHandlerChain.java =================================================================== RCS file: /cvsroot/jboss/webservice/src/main/org/jboss/webservice/handler/ClientHandlerChain.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ClientHandlerChain.java 20 Jul 2004 13:48:55 -0000 1.2 +++ ClientHandlerChain.java 18 Aug 2004 20:51:37 -0000 1.3 @@ -6,14 +6,22 @@ */ package org.jboss.webservice.handler; -// $Id: ClientHandlerChain.java,v 1.2 2004/07/20 13:48:55 tdiesler Exp $ +// $Id: ClientHandlerChain.java,v 1.3 2004/08/18 20:51:37 tdiesler Exp $ import org.jboss.logging.Logger; +import org.apache.axis.AxisFault; +import org.apache.axis.Constants; +import org.apache.axis.utils.Messages; import javax.xml.rpc.handler.MessageContext; +import javax.xml.rpc.handler.soap.SOAPMessageContext; +import javax.xml.rpc.JAXRPCException; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPPart; +import javax.xml.soap.SOAPException; +import javax.xml.soap.SOAPHeaderElement; import java.util.List; +import java.util.Iterator; /** * No special behaviour required on the client side. @@ -27,4 +35,15 @@ { super(infos); } + + /** The handleResponse method initiates the response processing for this handler chain. + */ + protected boolean doHandleResponse(MessageContext msgContext) + { + boolean status = super.doHandleResponse(msgContext); + + checkMustUnderstand(msgContext); + + return status; + } } 1.4 +31 -1 webservice/src/main/org/jboss/webservice/handler/HandlerChainBaseImpl.java Index: HandlerChainBaseImpl.java =================================================================== RCS file: /cvsroot/jboss/webservice/src/main/org/jboss/webservice/handler/HandlerChainBaseImpl.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- HandlerChainBaseImpl.java 20 Jul 2004 13:48:55 -0000 1.3 +++ HandlerChainBaseImpl.java 18 Aug 2004 20:51:37 -0000 1.4 @@ -6,9 +6,11 @@ */ package org.jboss.webservice.handler; -// $Id: HandlerChainBaseImpl.java,v 1.3 2004/07/20 13:48:55 tdiesler Exp $ +// $Id: HandlerChainBaseImpl.java,v 1.4 2004/08/18 20:51:37 tdiesler Exp $ import org.apache.axis.message.SOAPElementAxisImpl; +import org.apache.axis.AxisFault; +import org.apache.axis.Constants; import org.jboss.logging.Logger; import javax.xml.rpc.JAXRPCException; @@ -16,9 +18,11 @@ import javax.xml.rpc.handler.HandlerChain; import javax.xml.rpc.handler.HandlerInfo; import javax.xml.rpc.handler.MessageContext; +import javax.xml.rpc.handler.soap.SOAPMessageContext; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPPart; +import javax.xml.soap.SOAPHeaderElement; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -414,6 +418,32 @@ return entry.handler; } + /** Check if there are mustUnderstand headers that were not processed + */ + protected void checkMustUnderstand(MessageContext msgContext) + { + try + { + SOAPMessageContext msgCtx = (SOAPMessageContext)msgContext; + SOAPPart soapPart = msgCtx.getMessage().getSOAPPart(); + Iterator it = soapPart.getEnvelope().getHeader().extractAllHeaderElements(); + while (it.hasNext()) + { + SOAPHeaderElement headerElement = (SOAPHeaderElement)it.next(); + if (headerElement.getMustUnderstand() == true) + { + AxisFault fault = new AxisFault("Found mustUnderstand header that was not processed"); + fault.setFaultCode(Constants.FAULT_MUSTUNDERSTAND); + throw new JAXRPCException(fault); + } + } + } + catch (SOAPException e) + { + log.error("Cannot check mustUnderstand for headers", e); + } + } + /** * An entry in the handler list */ 1.3 +12 -1 webservice/src/main/org/jboss/webservice/handler/ServerHandlerChain.java Index: ServerHandlerChain.java =================================================================== RCS file: /cvsroot/jboss/webservice/src/main/org/jboss/webservice/handler/ServerHandlerChain.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ServerHandlerChain.java 20 Jul 2004 13:48:55 -0000 1.2 +++ ServerHandlerChain.java 18 Aug 2004 20:51:37 -0000 1.3 @@ -6,7 +6,7 @@ */ package org.jboss.webservice.handler; -// $Id: ServerHandlerChain.java,v 1.2 2004/07/20 13:48:55 tdiesler Exp $ +// $Id: ServerHandlerChain.java,v 1.3 2004/08/18 20:51:37 tdiesler Exp $ import org.apache.axis.providers.java.RPCInvocation; import org.apache.axis.providers.java.RPCProvider; @@ -33,6 +33,17 @@ super(infos); } + /** The handleResponse method initiates the response processing for this handler chain. + */ + protected boolean doHandleResponse(MessageContext msgContext) + { + boolean status = super.doHandleResponse(msgContext); + + checkMustUnderstand(msgContext); + + return status; + } + /** * Gets the RPCInvocation before the the server handler chain is invoked, gets it again * after handler processing and replaces it in the message contaxt in case the handlers |