package oracle.demo.header;
import java.io.*; import java.util.Map; import javax.xml.namespace.QName; import javax.xml.rpc.handler.MessageContext; import javax.xml.rpc.handler.HandlerInfo; import javax.xml.rpc.handler.soap.SOAPMessageContext; import javax.xml.soap.*;
import java.text.DateFormat;
import java.util.Date;
public class AuthenticateHandler implements javax.xml.rpc.handler.Handler {
private PrintStream out =System.out; private QName[] headers; private DateFormat formater = DateFormat.getDateTimeInstance();
private static String VALID_ID="SCOTT"; private static String VALID_PASSWORD="TIGER";
public AuthenticateHandler () { out.println("--- In AuthenticateHandler Constructor."); }
public void init(HandlerInfo info) { out.println("--- In AuthenticateHandler.init ()");
headers = info.getHeaders(); Map config = info.getHandlerConfig(); if( config!=null){ VALID_ID =(String)config.get("id"); VALID_PASSWORD=(String)config.get("password"); } }
public boolean handleFault(MessageContext context) { out.println("--- In AuthenticateHandler.handleFault (), context=" + context); return true; }
public boolean handleRequest (MessageContext context) { boolean exit =true; String name; out.println("--- In AuthenticateHandler.handleRequest () at "
+formater.format(new Date()));
try { SOAPMessageContext smc = (SOAPMessageContext) context;
SOAPEnvelope se = smc.getMessage().getSOAPPart().getEnvelope();
SOAPHeader sh = se.getHeader();
if(sh==null){ out.println("--- No headers found in the input SOAP request"); exit = false; } else
exit=processSOAPHeader(sh); } catch (Exception ex) { ex.printStackTrace(); }
return exit; }
private boolean processSOAPHeader (SOAPHeader sh) {
boolean authenticated = false; boolean found = false;
QName[] headers = getHeaders(); javax.xml.soap.Name sName;
if(headers.length==0) { out.println("no headers to process"); }else{ for(int x=0;x<headers.length;x++){ out.println("SOAP Header that it can process :"+headers[x]);
java.util.Iterator childElems = sh.getChildElements(); SOAPElement child;
while (childElems.hasNext()) { Object elem = childElems.next(); if(elem instanceof SOAPElement ){ child = (SOAPElement) elem; sName = child.getElementName();
if (sName.getLocalName().equals(headers[x].getLocalPart()) && sName.getURI().equals(headers[x].getNamespaceURI())) { found = true; authenticated= processSOAPHeaderInfo (child); } } }
if(found){ out.println("---- header element "+headers[x]+ " found in SOAP req"); break; } else
out.println("---- header element "+headers[x]+ " not found in SOAP req");
} } return authenticated; }
private boolean processSOAPHeaderInfo (SOAPElement e) { boolean authenticated = true; String _id=""; String _password=""; javax.xml.soap.Name sName;
sName = e.getElementName();
out.println("--- \tElement="+e.getElementName().getQualifiedName());
java.util.Iterator childElems = e.getChildElements();
SOAPElement child;
while (childElems.hasNext()) { Object elem = childElems.next();
if(elem instanceof SOAPElement ){ child = (SOAPElement) elem; sName = child.getElementName();
if (sName.getLocalName().equals("id")) { out.println("---\t\tid ="+child.getValue()); _id=child.getValue(); }
if (sName.getLocalName().equals("password")) { out.println("---\t\tpassword ="+child.getValue()); _password =child.getValue(); } } }
if(_id.equals(VALID_ID) && _password.equals(VALID_PASSWORD)){ out.println("Authenticated by the Second handler !!!!!"); }else{ out.println("could not authenticate ,WRONG id or password"); authenticated = false; }
return authenticated;
}
public boolean handleResponse (MessageContext context) { out.println("--- In AuthenticateHandler.handleResponse ()"); return true; }
public javax.xml.namespace.QName[] getHeaders() { out.println("--- In AuthenticateHandler.getHeaders ()"); return headers; }
public void destroy() { out.println("--- In AuthenticateHandler.destroy ()"); out.close(); }
}
|