97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenkpackage com.sun.org.apache.xml.internal.security.utils;
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Briciimport com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Briciimport org.w3c.dom.Element;
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Lunaimport org.w3c.dom.Node;
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Bricipublic abstract class ElementCheckerImpl implements ElementChecker {
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici public boolean isNamespaceElement(Node el, String type, String ns) {
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici if ((el == null) ||
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici ns!=el.getNamespaceURI() || !el.getLocalName().equals(type)){
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici return false;
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici }
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici return true;
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici }
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici /** A checker for DOM that interns NS */
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici public static class InternedNsChecker extends ElementCheckerImpl{
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici public void guaranteeThatElementInCorrectSpace(ElementProxy expected,
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici Element actual) throws XMLSecurityException {
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici String localnameSHOULDBE = expected.getBaseLocalName();
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici String namespaceSHOULDBE = expected.getBaseNamespace();
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici String localnameIS = actual.getLocalName();
6c789cb939aac8e3291c69aa5f1ba52529b4752fAlin Brici String namespaceIS = actual.getNamespaceURI();
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk if ((namespaceSHOULDBE!=namespaceIS) ||
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk !localnameSHOULDBE.equals(localnameIS) ) {
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk Object exArgs[] = { namespaceIS +":"+ localnameIS,
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk namespaceSHOULDBE +":"+ localnameSHOULDBE};
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk throw new XMLSecurityException("xml.WrongElement", exArgs);
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk }
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk }
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk }
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk
87b3fc65db52638e30547ac9de01938f83b78758Peter Major /** A checker for DOM that interns NS */
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna public static class FullChecker extends ElementCheckerImpl {
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna public void guaranteeThatElementInCorrectSpace(ElementProxy expected,
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna Element actual) throws XMLSecurityException {
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna String localnameSHOULDBE = expected.getBaseLocalName();
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna String namespaceSHOULDBE = expected.getBaseNamespace();
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna String localnameIS = actual.getLocalName();
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna String namespaceIS = actual.getNamespaceURI();
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna if ((!namespaceSHOULDBE.equals(namespaceIS)) ||
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna !localnameSHOULDBE.equals(localnameIS) ) {
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna Object exArgs[] = { namespaceIS +":"+ localnameIS,
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna namespaceSHOULDBE +":"+ localnameSHOULDBE};
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna throw new XMLSecurityException("xml.WrongElement", exArgs);
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna }
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna }
c375ffd945a63cb2de20fda03e2ef0cdf96e64d9David Luna }
87b3fc65db52638e30547ac9de01938f83b78758Peter Major
97d9dc3f5c53b6801baddd5100b9fae431ac7e06jeff.schenk /** An empty checker if schema checking is used */
87b3fc65db52638e30547ac9de01938f83b78758Peter Major public static class EmptyChecker extends ElementCheckerImpl {
87b3fc65db52638e30547ac9de01938f83b78758Peter Major public void guaranteeThatElementInCorrectSpace(ElementProxy expected,
87b3fc65db52638e30547ac9de01938f83b78758Peter Major Element actual) throws XMLSecurityException {
87b3fc65db52638e30547ac9de01938f83b78758Peter Major }
87b3fc65db52638e30547ac9de01938f83b78758Peter Major }
87b3fc65db52638e30547ac9de01938f83b78758Peter Major}
87b3fc65db52638e30547ac9de01938f83b78758Peter Major