package de.kp.wsclient.security; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * This is the base class for SecEncryptor, SecDecryptor * and also SecSignature and holds common methods to * create or retrieve SOAP message elements. * * @author Stefan Krusche (krusche@dr-kruscheundpartner.de) * */ public class SecBase { /** * This method creates a Security Token Reference (STR) element, * which holds a Reference element with a predefined URI, that * points to the Binary Security Token (BST) as part of the * wsse:Security header. * * @param xmlDoc * @return */ protected Element createSTR(Document xmlDoc) { String qualifiedName = SecConstants.WSSE_PRE + ":" + SecConstants.SECURITY_TOKEN_REFERENCE; Element secRef = xmlDoc.createElementNS(SecConstants.WSSE_NS, qualifiedName); Element ref = createReference(xmlDoc); ref.setAttribute("URI", "#" + SecConstants.SENDER_CERT); ref.setAttribute("ValueType", SecConstants.X509TOKEN_NS + "#X509v3"); secRef.appendChild(ref); return secRef; } /** * This method creates Reference element. * * @param xmlDoc * @return */ protected Element createReference(Document xmlDoc) { String qualifiedName = SecConstants.WSSE_PRE + ":" + SecConstants.REFERENCE; Element ref = xmlDoc.createElementNS(SecConstants.WSSE_NS, qualifiedName); return ref; } /** * This method determines whether there is a wsse:Security element in * a W3C DOM document or not. * * @param xmlDoc * @return */ protected boolean isSecHeader(Document xmlDoc) { NodeList nodes = xmlDoc.getElementsByTagNameNS(SecConstants.WSSE_NS, SecConstants.SECURITY); return (nodes.getLength() == 0) ? false : true; } protected Element getSecHeader(Document xmlDoc) throws Exception { NodeList nodes = xmlDoc.getElementsByTagNameNS(SecConstants.WSSE_NS, SecConstants.SECURITY); if (nodes.getLength() == 0) return createSecHeader(xmlDoc); return (Element) nodes.item(0); } /** * This method creates a wsse:Security element. * * @param xmlDoc * @return * @throws Exception */ protected Element createSecHeader(Document xmlDoc) throws Exception { String qualifiedName = SecConstants.WSSE_PRE + ":" + SecConstants.SECURITY; return xmlDoc.createElementNS(SecConstants.WSSE_NS, qualifiedName); } /** * This method retrieves a soap:Header element from a * W3C DOM document. * * @param xmlDoc * @return */ protected Element getSOAPHeader(Document xmlDoc) { NodeList nodes = xmlDoc.getElementsByTagNameNS(SecConstants.URI_SOAP12_ENV, SecConstants.ELEM_HEADER); if (nodes.getLength() == 0) return null; return (Element) nodes.item(0); } /** * This method retrieves a soap:Body element from a * W3C DOM document. * * @param xmlDoc * @return */ protected Element getSOAPBody(Document xmlDoc) { NodeList nodes = xmlDoc.getElementsByTagNameNS(SecConstants.URI_SOAP12_ENV, SecConstants.ELEM_BODY); if (nodes.getLength() == 0) return null; return (Element) nodes.item(0); } }