/* * Created on 15.03.2005 * * For more information about SOAP headers see: * http://java.sun.com/webservices/docs/1.3/tutorial/doc/JAXRPC7.html#wp122942 */ package jplagTutorial.util; import javax.xml.namespace.QName; import javax.xml.rpc.handler.GenericHandler; import javax.xml.rpc.handler.HandlerInfo; import javax.xml.rpc.handler.MessageContext; import javax.xml.rpc.handler.soap.SOAPMessageContext; 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; /** * @author Moritz Kroll */ public class JPlagClientAccessHandler extends GenericHandler { public static final int compatibilityLevel = 4; protected HandlerInfo info=null; /* * Access information used to build up the Access header element */ protected String username=null; protected String password=null; /** * Return the headers given by the info HandlerInfo object */ public QName[] getHeaders() { return info.getHeaders(); } /** * Save the HandlerInfo object */ public void init(HandlerInfo arg) { info=arg; } /** * Used to set the username and password * Use something like the following to access this function: * * private JPlagClientAccessHandler accessHandler=null; * * [...] * * HandlerChain handlerchain=stub._getHandlerChain(); * Iterator handlers=handlerchain.iterator(); * while(handlers.hasNext()) * { * Handler handler=(Handler) handlers.next(); * if(handler instanceof JPlagClientAccessHandler) * { * accessHandler=((JPlagClientAccessHandler)handler); * break; * } * } * if(accessHandler!=null) * { * accessHandler.setUserPassObjects(getJUsernameField().getText(), * getJPasswordField().getText()); * } */ public void setUserPassObjects(String username, String password) { this.username=username; this.password=password; } /** * Adds an "Access" element to the SOAP header */ public boolean handleRequest(MessageContext msgct) { if(msgct instanceof SOAPMessageContext) { SOAPMessageContext smsgct=(SOAPMessageContext) msgct; try { SOAPMessage msg=smsgct.getMessage(); SOAPEnvelope envelope=msg.getSOAPPart().getEnvelope(); SOAPHeader header=msg.getSOAPHeader(); if(header==null) header=envelope.addHeader(); // add an header if non exists SOAPHeaderElement accessElement=header.addHeaderElement( envelope.createName("Access","ns0", "http://www.ipd.uni-karlsruhe.de/jplag/types")); SOAPElement usernameelem=accessElement.addChildElement( "username"); usernameelem.addTextNode(username); SOAPElement passwordelem=accessElement.addChildElement( "password"); passwordelem.addTextNode(password); SOAPElement compatelem=accessElement.addChildElement( "compatLevel"); compatelem.addTextNode(compatibilityLevel+""); } catch (SOAPException x) { System.out.println("Unable to create access SOAP header!"); x.printStackTrace(); } } return true; } }