jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java
author mullan
Mon, 13 May 2013 17:50:14 -0400
changeset 18266 26e69da689b9
parent 18240 cda839ac048f
child 18780 f47b920867e7
permissions -rw-r--r--
8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod Reviewed-by: xuelei, hawtin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
     2
 * reserved comment block
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT REMOVE OR ALTER!
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 */
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
     5
/**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
     6
 * Licensed to the Apache Software Foundation (ASF) under one
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
     7
 * or more contributor license agreements. See the NOTICE file
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
     8
 * distributed with this work for additional information
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
     9
 * regarding copyright ownership. The ASF licenses this file
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    10
 * to you under the Apache License, Version 2.0 (the
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    11
 * "License"); you may not use this file except in compliance
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    12
 * with the License. You may obtain a copy of the License at
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 *
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    14
 * http://www.apache.org/licenses/LICENSE-2.0
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 *
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    16
 * Unless required by applicable law or agreed to in writing,
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    17
 * software distributed under the License is distributed on an
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    18
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    19
 * KIND, either express or implied. See the License for the
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    20
 * specific language governing permissions and limitations
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    21
 * under the License.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
package com.sun.org.apache.xml.internal.security.utils;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
import java.math.BigInteger;
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    26
import java.util.concurrent.ConcurrentHashMap;
10694
cf59e2badd14 7088502: Security libraries don't build with javac -Werror
mullan
parents: 1337
diff changeset
    27
import java.util.Map;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
import org.w3c.dom.Attr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
import org.w3c.dom.Document;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
import org.w3c.dom.Element;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
import org.w3c.dom.Node;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
import org.w3c.dom.NodeList;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
import org.w3c.dom.Text;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
/**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
 * This is the base class to all Objects which have a direct 1:1 mapping to an
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
 * Element in a particular namespace.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
public abstract class ElementProxy {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    44
    protected static final java.util.logging.Logger log =
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
        java.util.logging.Logger.getLogger(ElementProxy.class.getName());
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    47
    /** Field constructionElement */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    48
    protected Element _constructionElement = null;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    49
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    50
    /** Field baseURI */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    51
    protected String _baseURI = null;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    52
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    53
    /** Field doc */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    54
    protected Document _doc = null;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    55
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    56
    /** Field prefixMappings */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    57
    private static Map<String, String> prefixMappings = new ConcurrentHashMap<String, String>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    59
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    60
     * Constructor ElementProxy
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    61
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    62
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    63
    public ElementProxy() {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    64
    }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    65
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    66
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    67
     * Constructor ElementProxy
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    68
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    69
     * @param doc
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    70
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    71
    public ElementProxy(Document doc) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    72
        if (doc == null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    73
            throw new RuntimeException("Document is null");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    74
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    75
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    76
        this._doc = doc;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    77
        this._constructionElement =
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    78
            createElementForFamilyLocal(this._doc, this.getBaseNamespace(), this.getBaseLocalName());
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    79
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    81
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    82
     * Constructor ElementProxy
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    83
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    84
     * @param element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    85
     * @param BaseURI
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    86
     * @throws XMLSecurityException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    87
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    88
    public ElementProxy(Element element, String BaseURI) throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    89
        if (element == null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    90
            throw new XMLSecurityException("ElementProxy.nullElement");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    91
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    93
        if (log.isLoggable(java.util.logging.Level.FINE)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    94
            log.log(java.util.logging.Level.FINE, "setElement(\"" + element.getTagName() + "\", \"" + BaseURI + "\")");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    95
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    97
        this._doc = element.getOwnerDocument();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    98
        this._constructionElement = element;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
    99
        this._baseURI = BaseURI;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   100
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   101
        this.guaranteeThatElementInCorrectSpace();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   102
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   104
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   105
     * Returns the namespace of the Elements of the sub-class.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   106
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   107
     * @return the namespace of the Elements of the sub-class.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   108
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   109
    public abstract String getBaseNamespace();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   110
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   111
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   112
     * Returns the localname of the Elements of the sub-class.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   113
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   114
     * @return the localname of the Elements of the sub-class.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   115
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   116
    public abstract String getBaseLocalName();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   117
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   119
    protected Element createElementForFamilyLocal(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   120
        Document doc, String namespace, String localName
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   121
    ) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   122
        Element result = null;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   123
        if (namespace == null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   124
            result = doc.createElementNS(null, localName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   125
        } else {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   126
            String baseName = this.getBaseNamespace();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   127
            String prefix = ElementProxy.getDefaultPrefix(baseName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   128
            if ((prefix == null) || (prefix.length() == 0)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   129
                result = doc.createElementNS(namespace, localName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   130
                result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns", namespace);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   131
            } else {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   132
                result = doc.createElementNS(namespace, prefix + ":" + localName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   133
                result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + prefix, namespace);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   134
            }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   135
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   136
        return result;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   137
    }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   138
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   140
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   141
     * This method creates an Element in a given namespace with a given localname.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   142
     * It uses the {@link ElementProxy#getDefaultPrefix} method to decide whether
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   143
     * a particular prefix is bound to that namespace.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   144
     * <BR />
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   145
     * This method was refactored out of the constructor.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   146
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   147
     * @param doc
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   148
     * @param namespace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   149
     * @param localName
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   150
     * @return The element created.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   151
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   152
    public static Element createElementForFamily(Document doc, String namespace, String localName) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   153
        Element result = null;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   154
        String prefix = ElementProxy.getDefaultPrefix(namespace);
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   155
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   156
        if (namespace == null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   157
            result = doc.createElementNS(null, localName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   158
        } else {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   159
            if ((prefix == null) || (prefix.length() == 0)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   160
                result = doc.createElementNS(namespace, localName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   161
                result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns", namespace);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   162
            } else {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   163
                result = doc.createElementNS(namespace, prefix + ":" + localName);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   164
                result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + prefix, namespace);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   165
            }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   166
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   167
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   168
        return result;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   169
    }
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   170
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   171
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   172
     * Method setElement
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   173
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   174
     * @param element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   175
     * @param BaseURI
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   176
     * @throws XMLSecurityException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   177
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   178
    public void setElement(Element element, String BaseURI) throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   179
        if (element == null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   180
            throw new XMLSecurityException("ElementProxy.nullElement");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   181
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   182
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   183
        if (log.isLoggable(java.util.logging.Level.FINE)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   184
            log.log(java.util.logging.Level.FINE, "setElement(" + element.getTagName() + ", \"" + BaseURI + "\"");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   185
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   186
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   187
        this._doc = element.getOwnerDocument();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   188
        this._constructionElement = element;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   189
        this._baseURI = BaseURI;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   190
    }
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   191
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   193
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   194
     * Returns the Element which was constructed by the Object.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   195
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   196
     * @return the Element which was constructed by the Object.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   197
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   198
    public final Element getElement() {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   199
        return this._constructionElement;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   200
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   201
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   202
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   203
     * Returns the Element plus a leading and a trailing CarriageReturn Text node.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   204
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   205
     * @return the Element which was constructed by the Object.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   206
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   207
    public final NodeList getElementPlusReturns() {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   208
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   209
        HelperNodeList nl = new HelperNodeList();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   211
        nl.appendChild(this._doc.createTextNode("\n"));
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   212
        nl.appendChild(this.getElement());
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   213
        nl.appendChild(this._doc.createTextNode("\n"));
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   215
        return nl;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   216
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   218
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   219
     * Method getDocument
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   220
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   221
     * @return the Document where this element is contained.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   222
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   223
    public Document getDocument() {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   224
        return this._doc;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   225
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   226
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   227
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   228
     * Method getBaseURI
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   229
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   230
     * @return the base uri of the namespace of this element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   231
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   232
    public String getBaseURI() {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   233
        return this._baseURI;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   234
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   235
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   236
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   237
     * Method guaranteeThatElementInCorrectSpace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   238
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   239
     * @throws XMLSecurityException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   240
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   241
    void guaranteeThatElementInCorrectSpace() throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   242
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   243
        String expectedLocalName = this.getBaseLocalName();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   244
        String expectedNamespaceUri = this.getBaseNamespace();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   245
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   246
        String actualLocalName = this._constructionElement.getLocalName();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   247
        String actualNamespaceUri = this._constructionElement.getNamespaceURI();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   248
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   249
        if(!expectedNamespaceUri.equals(actualNamespaceUri)
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   250
            && !expectedLocalName.equals(actualLocalName)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   251
            Object exArgs[] = { actualNamespaceUri + ":" + actualLocalName,
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   252
                                expectedNamespaceUri + ":" + expectedLocalName};
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   253
            throw new XMLSecurityException("xml.WrongElement", exArgs);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   254
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   255
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   256
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   257
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   258
     * Method addBigIntegerElement
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   259
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   260
     * @param bi
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   261
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   262
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   263
    public void addBigIntegerElement(BigInteger bi, String localname) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   264
        if (bi != null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   265
            Element e = XMLUtils.createElementInSignatureSpace(this._doc, localname);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   266
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   267
            Base64.fillElementWithBigInteger(e, bi);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   268
            this._constructionElement.appendChild(e);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   269
            XMLUtils.addReturnToElement(this._constructionElement);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   270
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   271
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   272
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   273
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   274
     * Method addBase64Element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   275
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   276
     * @param bytes
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   277
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   278
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   279
    public void addBase64Element(byte[] bytes, String localname) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   280
        if (bytes != null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   281
            Element e = Base64.encodeToElement(this._doc, localname, bytes);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   282
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   283
            this._constructionElement.appendChild(e);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   284
            if (!XMLUtils.ignoreLineBreaks()) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   285
                this._constructionElement.appendChild(this._doc.createTextNode("\n"));
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   286
            }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   287
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   288
    }
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   289
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   290
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   291
     * Method addTextElement
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   292
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   293
     * @param text
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   294
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   295
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   296
    public void addTextElement(String text, String localname) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   297
        Element e = XMLUtils.createElementInSignatureSpace(this._doc, localname);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   298
        Text t = this._doc.createTextNode(text);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   299
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   300
        e.appendChild(t);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   301
        this._constructionElement.appendChild(e);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   302
        XMLUtils.addReturnToElement(this._constructionElement);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   303
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   304
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   305
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   306
     * Method addBase64Text
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   307
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   308
     * @param bytes
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   309
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   310
    public void addBase64Text(byte[] bytes) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   311
        if (bytes != null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   312
            Text t = XMLUtils.ignoreLineBreaks()
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   313
                ? this._doc.createTextNode(Base64.encode(bytes))
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   314
                : this._doc.createTextNode("\n" + Base64.encode(bytes) + "\n");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   315
            this._constructionElement.appendChild(t);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   316
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   317
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   318
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   319
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   320
     * Method addText
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   321
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   322
     * @param text
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   323
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   324
    public void addText(String text) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   325
        if (text != null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   326
            Text t = this._doc.createTextNode(text);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   327
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   328
            this._constructionElement.appendChild(t);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   329
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   330
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   331
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   332
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   333
     * Method getVal
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   334
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   335
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   336
     * @param namespace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   337
     * @return The biginteger contained in the given element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   338
     * @throws Base64DecodingException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   339
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   340
    public BigInteger getBigIntegerFromChildElement(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   341
        String localname, String namespace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   342
    ) throws Base64DecodingException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   343
        return Base64.decodeBigIntegerFromText(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   344
            XMLUtils.selectNodeText(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   345
                this._constructionElement.getFirstChild(), namespace, localname, 0
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   346
            )
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   347
        );
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   348
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   349
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   350
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   351
     * Method getBytesFromChildElement
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   352
     * @deprecated
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   353
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   354
     * @param namespace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   355
     * @return the bytes
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   356
     * @throws XMLSecurityException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   357
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   358
    @Deprecated
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   359
    public byte[] getBytesFromChildElement(String localname, String namespace)
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   360
        throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   361
        Element e =
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   362
            XMLUtils.selectNode(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   363
                this._constructionElement.getFirstChild(), namespace, localname, 0
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   364
            );
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   365
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   366
        return Base64.decode(e);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   367
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   368
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   369
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   370
     * Method getTextFromChildElement
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   371
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   372
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   373
     * @param namespace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   374
     * @return the Text of the textNode
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   375
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   376
    public String getTextFromChildElement(String localname, String namespace) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   377
        return XMLUtils.selectNode(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   378
                this._constructionElement.getFirstChild(),
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   379
                namespace,
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   380
                localname,
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   381
                0).getTextContent();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   382
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   383
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   384
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   385
     * Method getBytesFromTextChild
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   386
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   387
     * @return The base64 bytes from the text children of this element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   388
     * @throws XMLSecurityException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   389
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   390
    public byte[] getBytesFromTextChild() throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   391
        return Base64.decode(XMLUtils.getFullTextChildrenFromElement(this._constructionElement));
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   392
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   393
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   394
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   395
     * Method getTextFromTextChild
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   396
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   397
     * @return the Text obtained by concatenating all the text nodes of this
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   398
     *    element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   399
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   400
    public String getTextFromTextChild() {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   401
        return XMLUtils.getFullTextChildrenFromElement(this._constructionElement);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   402
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   403
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   404
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   405
     * Method length
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   406
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   407
     * @param namespace
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   408
     * @param localname
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   409
     * @return the number of elements {namespace}:localname under this element
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   410
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   411
    public int length(String namespace, String localname) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   412
        int number = 0;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   413
        Node sibling = this._constructionElement.getFirstChild();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   414
        while (sibling != null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   415
            if (localname.equals(sibling.getLocalName())
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   416
                && namespace.equals(sibling.getNamespaceURI())) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   417
                number++;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   418
            }
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   419
            sibling = sibling.getNextSibling();
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   420
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   421
        return number;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   422
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   423
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   424
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   425
     * Adds an xmlns: definition to the Element. This can be called as follows:
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   426
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   427
     * <PRE>
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   428
     * // set namespace with ds prefix
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   429
     * xpathContainer.setXPathNamespaceContext("ds", "http://www.w3.org/2000/09/xmldsig#");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   430
     * xpathContainer.setXPathNamespaceContext("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   431
     * </PRE>
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   432
     *
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   433
     * @param prefix
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   434
     * @param uri
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   435
     * @throws XMLSecurityException
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   436
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   437
    public void setXPathNamespaceContext(String prefix, String uri)
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   438
        throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   439
        String ns;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   440
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   441
        if ((prefix == null) || (prefix.length() == 0)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   442
            throw new XMLSecurityException("defaultNamespaceCannotBeSetHere");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   443
        } else if (prefix.equals("xmlns")) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   444
            throw new XMLSecurityException("defaultNamespaceCannotBeSetHere");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   445
        } else if (prefix.startsWith("xmlns:")) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   446
            ns = prefix;//"xmlns:" + prefix.substring("xmlns:".length());
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   447
        } else {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   448
            ns = "xmlns:" + prefix;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   449
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   450
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   451
        Attr a = this._constructionElement.getAttributeNodeNS(Constants.NamespaceSpecNS, ns);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   452
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   453
        if (a != null) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   454
            if (!a.getNodeValue().equals(uri)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   455
                Object exArgs[] = { ns, this._constructionElement.getAttributeNS(null, ns) };
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   456
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   457
                throw new XMLSecurityException("namespacePrefixAlreadyUsedByOtherURI", exArgs);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   458
            }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   459
            return;
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   460
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   461
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   462
        this._constructionElement.setAttributeNS(Constants.NamespaceSpecNS, ns, uri);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   463
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   464
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   465
    /**
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   466
     * Method setDefaultPrefix
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   467
     *
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   468
     * @param namespace
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   469
     * @param prefix
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   470
     * @throws XMLSecurityException
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   471
     */
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   472
    public static void setDefaultPrefix(String namespace, String prefix)
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   473
        throws XMLSecurityException {
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   474
        if (prefixMappings.containsValue(prefix)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   475
            String storedPrefix = prefixMappings.get(namespace);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   476
            if (!storedPrefix.equals(prefix)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   477
                Object exArgs[] = { prefix, namespace, storedPrefix };
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   478
90ce3da70b43 Initial load
duke
parents:
diff changeset
   479
                throw new XMLSecurityException("prefix.AlreadyAssigned", exArgs);
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   480
            }
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   481
        }
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   482
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   483
        if (Constants.SignatureSpecNS.equals(namespace)) {
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   484
            XMLUtils.setDsPrefix(prefix);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   485
        }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   486
        if (EncryptionConstants.EncryptionSpecNS.equals(namespace)) {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   487
            XMLUtils.setXencPrefix(prefix);
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   488
        }
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   489
        prefixMappings.put(namespace, prefix);
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   490
    }
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   491
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   492
    /**
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   493
     * This method registers the default prefixes.
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   494
     */
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   495
    public static void registerDefaultPrefixes() throws XMLSecurityException {
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   496
        setDefaultPrefix("http://www.w3.org/2000/09/xmldsig#", "ds");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   497
        setDefaultPrefix("http://www.w3.org/2001/04/xmlenc#", "xenc");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   498
        setDefaultPrefix("http://www.w3.org/2009/xmlenc11#", "xenc11");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   499
        setDefaultPrefix("http://www.xmlsecurity.org/experimental#", "experimental");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   500
        setDefaultPrefix("http://www.w3.org/2002/04/xmldsig-filter2", "dsig-xpath-old");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   501
        setDefaultPrefix("http://www.w3.org/2002/06/xmldsig-filter2", "dsig-xpath");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   502
        setDefaultPrefix("http://www.w3.org/2001/10/xml-exc-c14n#", "ec");
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   503
        setDefaultPrefix(
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   504
            "http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter", "xx"
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   505
        );
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   506
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   507
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   508
    /**
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   509
     * Method getDefaultPrefix
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   510
     *
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   511
     * @param namespace
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   512
     * @return the default prefix bind to this element.
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   513
     */
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   514
    public static String getDefaultPrefix(String namespace) {
18240
cda839ac048f 6741606: Integrate Apache Santuario
mullan
parents: 10694
diff changeset
   515
        return prefixMappings.get(namespace);
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   516
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   517
18266
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   518
    protected void setLocalIdAttribute(String attrName, String value) {
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   519
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   520
        if (value != null) {
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   521
            Attr attr = getDocument().createAttributeNS(null, attrName);
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   522
            attr.setValue(value);
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   523
            getElement().setAttributeNodeNS(attr);
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   524
            getElement().setIdAttributeNode(attr, true);
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   525
        }
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   526
        else {
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   527
            getElement().removeAttributeNS(null, attrName);
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   528
        }
26e69da689b9 8010714: XML DSig API allows a RetrievalMethod to reference another RetrievalMethod
mullan
parents: 18240
diff changeset
   529
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   530
}