Step:
1. Implement SOAPHandler class
2. Implement authentication part to the SOAPHandler part
2. Add SOAP handler to the Service class.
import java.util.Collections;
import java.util.Set;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class AuthenticationHandler implements SOAPHandler{
private static Logger log = Logger.getLogger(GCAuthenticationHandler.class.getName());
private String emailAddress;
private String password;
private String url = "http://www.localhost.net/webservice/";
private static final String CAuthenticationHeader= "CAuthenticationHeader";
public static enum AuthenticationHeader {EmailAddress, Password}
public GCAuthenticationHandler(String emailAddress, String password){
this.emailAddress = emailAddress;
this.password = password;
}
public GCAuthenticationHandler(String emailAddress, String password, String url){
this(emailAddress, password);
this.url = url;
}
@PostConstruct
public void init() {
}
@PreDestroy
public void destroy() {
}
public boolean handleMessage(SOAPMessageContext smc) {
boolean direction = ((Boolean) smc.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY)).booleanValue();
if (direction) {
try {
// get SOAP envelope from SOAP message
SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
// create instance of SOAP factory
SOAPFactory soapFactory = SOAPFactory.newInstance();
// create SOAP elements specifying prefix and URI
SOAPElement headerElm = soapFactory.createElement(CAuthenticationHeader, "", url);
SOAPElement idElm = soapFactory.createElement(AuthenticationHeader.Password.name(),"", url);
idElm.addTextNode(password);
SOAPElement passwdElm = soapFactory.createElement(AuthenticationHeader.EmailAddress.name(),"", url);
passwdElm.addTextNode(emailAddress);
// add child elements to the root element
headerElm.addChildElement(idElm);
headerElm.addChildElement(passwdElm);
// create SOAPHeader instance for SOAP envelope
SOAPHeader sh = envelope.addHeader();
// add SOAP element for header to SOAP header object
sh.addChildElement(headerElm);
} catch (Exception ex) {
ex.printStackTrace();
}
}
return true;
}
public SetgetHeaders() {
return Collections.EMPTY_SET;
}
public boolean handleFault(SOAPMessageContext messageContext) {
return true;
}
public void close(MessageContext context) {
}
}