001 /*
002 * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025 /*
026 * $Id: DOMValidateContext.java,v 1.8 2005/05/10 16:31:14 mullan Exp $
027 */
028 package javax.xml.crypto.dsig.dom;
029
030 import javax.xml.crypto.KeySelector;
031 import javax.xml.crypto.dom.DOMCryptoContext;
032 import javax.xml.crypto.dsig.XMLSignature;
033 import javax.xml.crypto.dsig.XMLSignatureFactory;
034 import javax.xml.crypto.dsig.XMLValidateContext;
035 import java.security.Key;
036 import org.w3c.dom.Node;
037
038 /**
039 * A DOM-specific {@link XMLValidateContext}. This class contains additional
040 * methods to specify the location in a DOM tree where an {@link XMLSignature}
041 * is to be unmarshalled and validated from.
042 *
043 * <p>Note that the behavior of an unmarshalled <code>XMLSignature</code>
044 * is undefined if the contents of the underlying DOM tree are modified by the
045 * caller after the <code>XMLSignature</code> is created.
046 *
047 * <p>Also, note that <code>DOMValidateContext</code> instances can contain
048 * information and state specific to the XML signature structure it is
049 * used with. The results are unpredictable if a
050 * <code>DOMValidateContext</code> is used with different signature structures
051 * (for example, you should not use the same <code>DOMValidateContext</code>
052 * instance to validate two different {@link XMLSignature} objects).
053 *
054 * @author Sean Mullan
055 * @author JSR 105 Expert Group
056 * @since 1.6
057 * @see XMLSignatureFactory#unmarshalXMLSignature(XMLValidateContext)
058 */
059 public class DOMValidateContext extends DOMCryptoContext implements
060 XMLValidateContext {
061
062 private Node node;
063
064 /**
065 * Creates a <code>DOMValidateContext</code> containing the specified key
066 * selector and node.
067 *
068 * @param ks a key selector for finding a validation key
069 * @param node the node
070 * @throws NullPointerException if <code>ks</code> or <code>node</code> is
071 * <code>null</code>
072 */
073 public DOMValidateContext(KeySelector ks, Node node) {
074 if (ks == null) {
075 throw new NullPointerException("key selector is null");
076 }
077 if (node == null) {
078 throw new NullPointerException("node is null");
079 }
080 setKeySelector(ks);
081 this .node = node;
082 }
083
084 /**
085 * Creates a <code>DOMValidateContext</code> containing the specified key
086 * and node. The validating key will be stored in a
087 * {@link KeySelector#singletonKeySelector singleton KeySelector} that
088 * is returned when the {@link #getKeySelector getKeySelector}
089 * method is called.
090 *
091 * @param validatingKey the validating key
092 * @param node the node
093 * @throws NullPointerException if <code>validatingKey</code> or
094 * <code>node</code> is <code>null</code>
095 */
096 public DOMValidateContext(Key validatingKey, Node node) {
097 if (validatingKey == null) {
098 throw new NullPointerException("validatingKey is null");
099 }
100 if (node == null) {
101 throw new NullPointerException("node is null");
102 }
103 setKeySelector(KeySelector.singletonKeySelector(validatingKey));
104 this .node = node;
105 }
106
107 /**
108 * Sets the node.
109 *
110 * @param node the node
111 * @throws NullPointerException if <code>node</code> is <code>null</code>
112 * @see #getNode
113 */
114 public void setNode(Node node) {
115 if (node == null) {
116 throw new NullPointerException();
117 }
118 this .node = node;
119 }
120
121 /**
122 * Returns the node.
123 *
124 * @return the node (never <code>null</code>)
125 * @see #setNode(Node)
126 */
127 public Node getNode() {
128 return node;
129 }
130 }
|