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

echoHeaderStringHandler

public class echoHeaderStringHandler extends org.apache.axis.handlers.BasicHandler
This handler processes the SOAP header "echoMeString" 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_STRING_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
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
            String strVal = (String)context.getProperty(ECHOHEADER_STRING_ID);
            if (strVal == null)
                return;
            
            Message msg = context.getResponseMessage();
            if (msg == null)
                return;
            SOAPEnvelope env = msg.getSOAPEnvelope();
            SOAPHeaderElement header = new SOAPHeaderElement(HEADER_NS,
                                                             HEADER_RESNAME,
                                                             strVal);
            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
                String strVal ;
                // header.getValue() doesn't seem to be connected to anything
                // we always get null.
                try {
                    strVal = (String)header.getValueAsType(Constants.XSD_STRING);
                } catch (Exception e) {
                    throw AxisFault.makeFault(e);
                }
                context.setProperty(ECHOHEADER_STRING_ID, strVal) ;
                header.setProcessed(true);
            }
        }