FileDocCategorySizeDatePackage
echoHeaderStructHandler.javaAPI DocApache Axis 1.44292Sat Apr 22 18:56:52 BST 2006samples.echo

echoHeaderStructHandler

public class echoHeaderStructHandler extends org.apache.axis.handlers.BasicHandler
This handler processes the SOAP header "echoMeStruct" defined in the SOAPBuilder Round2C interop tests.

Essentially, you install it on both the request and response chains of your service, on the server side.

author
Simon Fell (simon@zaks.demon.co.uk)

Fields Summary
static Log
log
public static final String
ECHOHEADER_STRUCT_ID
public static final String
HEADER_NS
public static final String
HEADER_REQNAME
public static final String
HEADER_RESNAME
public static final String
ACTOR_NEXT
public static final String
STRUCT_NS
public static final String
STRUCT_NAME
public static final QName
SOAPStructType
Constructors Summary
Methods Summary
public booleancanHandleBlock(javax.xml.namespace.QName qname)

    
        
        if (HEADER_NS.equals(qname.getNamespaceURI()) &&
                HEADER_REQNAME.equals(qname.getLocalPart())) {
            return true;
        }
        
        return false;
    
public voidinvoke(org.apache.axis.MessageContext context)
Process a MessageContext.

    
        if (context.getPastPivot()) {
            // This is a response.  Add the response header, if we saw
            // the requestHeader
            SOAPStruct hdrVal= (SOAPStruct)context.getProperty(ECHOHEADER_STRUCT_ID);
            if (hdrVal == null)
                return;
            
            Message msg = context.getResponseMessage();
            if (msg == null)
                return;
            SOAPEnvelope env = msg.getSOAPEnvelope();
            SOAPHeaderElement header = new SOAPHeaderElement(HEADER_NS,
                                                             HEADER_RESNAME,
                                                             hdrVal);
            env.addHeader(header);
        } else {
            // Request. look for the header
            Message msg = context.getRequestMessage();
            if (msg == null)
                throw new AxisFault(Messages.getMessage("noRequest00"));
            
            SOAPEnvelope env = msg.getSOAPEnvelope();
            SOAPHeaderElement header = env.getHeaderByName(HEADER_NS,
                                                           HEADER_REQNAME);
            
            if (header != null) {
                // seems Axis has already ignored any headers not tageted
                // at us
                SOAPStruct hdrVal ;
                // header.getValue() doesn't seem to be connected to anything
                // we always get null.
                try {
                    hdrVal = (SOAPStruct)header.getValueAsType(SOAPStructType);
                } catch (Exception e) {
                    throw AxisFault.makeFault(e);
                }
                context.setProperty(ECHOHEADER_STRUCT_ID, hdrVal) ;
                header.setProcessed(true);
            }
        }