Adding SOAP header in Webservice Handler


In this program in  "handleRequest" method i added a Username/password in SOAP Header.


import javax.xml.namespace.QName;
import javax.xml.rpc.handler.Handler;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.MessageContext;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;

public class WSDLServiceHandler implements Handler {
    private static final String HDR_PREFIX = "wsse";
    private static final String HDR_URI = "http://schemas.xmlsoap.org/ws/2002/07/secext";

    @Override
    public void destroy() {
    }

    @Override
    public QName[] getHeaders() {
        return null;
    }

    @Override
    public boolean handleFault(MessageContext context) {
        return true;
    }

    @Override
    public boolean handleRequest(MessageContext context) {
        try {
            SOAPMessageContext smc = (SOAPMessageContext) context;
            SOAPMessage msg = smc.getMessage();
            SOAPPart part = msg.getSOAPPart();
            SOAPEnvelope env = part.getEnvelope();
            SOAPHeader sh = msg.getSOAPHeader();
            if (sh == null) {
                sh = env.addHeader();
            }
            Name nameHdr = env.createName("Security", HDR_PREFIX, HDR_URI);
            SOAPHeaderElement security = sh.addHeaderElement(nameHdr);
            security.setMustUnderstand(false);
            security.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);
            SOAPElement userNameToken = security.addChildElement("UsernameToken", HDR_PREFIX);
            userNameToken.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);
            SOAPElement userName = userNameToken.addChildElement("Username",HDR_PREFIX);
            userName.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);
            userName.addTextNode("USERNAME");
            SOAPElement password = userNameToken.addChildElement("Password",HDR_PREFIX);
            password.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);
            password.addTextNode("UserPassword");
            String soapEnvelope = env.toString();
        } catch (SOAPException e) {
            e.printStackTrace();
        }
        return true;
    }

    @Override
    public boolean handleResponse(MessageContext context) {
        return true;
    }

    @Override
    public void init(HandlerInfo config) {
    }

}

No comments:

Post a Comment