elementproxy.java

来自「JAVA 所有包」· Java 代码 · 共 544 行 · 第 1/2 页

JAVA
544
字号
/* * Copyright  1999-2004 The Apache Software Foundation. * *  Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. *  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. * */package com.sun.org.apache.xml.internal.security.utils;import java.math.BigInteger;import java.util.HashMap;import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;import org.w3c.dom.Attr;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.w3c.dom.Text;/** * This is the base class to all Objects which have a direct 1:1 mapping to an * Element in a particular namespace. * * @author $Author: mullan $ */public abstract class ElementProxy {   /** {@link java.util.logging} logging facility */    static java.util.logging.Logger log =         java.util.logging.Logger.getLogger(ElementProxy.class.getName());   //J-    /** The element has been created by the code **/   public static final int MODE_CREATE  = 0;   /** The element has been readed from a DOM tree by the code **/   public static final int MODE_PROCESS = 1;   /** The element isn't known if it is readen or created **/   public static final int MODE_UNKNOWN = 2;   /** The element is going to be signed **/   public static final int MODE_SIGN    = MODE_CREATE;   /** The element is going to be verified **/   public static final int MODE_VERIFY  = MODE_PROCESS;   /** The element is going to be encrypted **/   public static final int MODE_ENCRYPT = MODE_CREATE;   /** The element is going to be decrypted **/   public static final int MODE_DECRYPT = MODE_PROCESS;   protected int _state = MODE_UNKNOWN;   //J+   /**    * Returns the namespace of the Elements of the sub-class.    *    * @return the namespace of the Elements of the sub-class.    */   public abstract String getBaseNamespace();   /**    * Returns the localname of the Elements of the sub-class.    *    * @return the localname of the Elements of the sub-class.    */   public abstract String getBaseLocalName();   /** Field _constructionElement */   protected Element _constructionElement = null;   /** Field _baseURI */   protected String _baseURI = null;   /** Field _doc */   protected Document _doc = null;   /**    * Constructor ElementProxy    *    */   public ElementProxy() {      this._doc = null;      this._state = ElementProxy.MODE_UNKNOWN;      this._baseURI = null;      this._constructionElement = null;   }   /**    * Constructor ElementProxy    *    * @param doc    */   public ElementProxy(Document doc) {      this();      if (doc == null) {         throw new RuntimeException("Document is null");      }      this._doc = doc;      this._state = ElementProxy.MODE_CREATE;      this._constructionElement = ElementProxy.createElementForFamily(this._doc,              this.getBaseNamespace(), this.getBaseLocalName());         }   /**    * This method creates an Element in a given namespace with a given localname.    * It uses the {@link ElementProxy#getDefaultPrefix} method to decide whether    * a particular prefix is bound to that namespace.    * <BR />    * This method was refactored out of the constructor.    *    * @param doc    * @param namespace    * @param localName    * @return The element created.    */   public static Element createElementForFamily(Document doc, String namespace,           String localName) {       //Element nscontext = XMLUtils.createDSctx(doc, "x", namespace);      Element result = null;      String prefix = ElementProxy.getDefaultPrefix(namespace);      if (namespace == null) {         result = doc.createElementNS(null, localName);      } else {         if ((prefix == null) || (prefix.length() == 0)) {            result = doc.createElementNS(namespace, localName);            result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns",                                  namespace);         } else {            result = doc.createElementNS(namespace, prefix + ":" + localName);            result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + prefix,                                  namespace);         }      }      return result;   }   /**    * Method setElement    *    * @param element    * @param BaseURI    * @throws XMLSecurityException    */   public void setElement(Element element, String BaseURI)           throws XMLSecurityException {      if (element == null) {         throw new XMLSecurityException("ElementProxy.nullElement");      }      if (true) {      }            if (true) {      	if (log.isLoggable(java.util.logging.Level.FINE))                                     log.log(java.util.logging.Level.FINE, "setElement(" + element.getTagName() + ", \"" + BaseURI + "\"");      }              this._doc = element.getOwnerDocument();      this._state = ElementProxy.MODE_PROCESS;      this._constructionElement = element;      this._baseURI = BaseURI;   }   /**    * Constructor ElementProxy    *    * @param element    * @param BaseURI    * @throws XMLSecurityException    */   public ElementProxy(Element element, String BaseURI)           throws XMLSecurityException {      this();      if (element == null) {         throw new XMLSecurityException("ElementProxy.nullElement");      }            if (true) {      	if (log.isLoggable(java.util.logging.Level.FINE))                                     log.log(java.util.logging.Level.FINE, "setElement(\"" + element.getTagName() + "\", \"" + BaseURI                + "\")");      }      this._doc = element.getOwnerDocument();      this._state = ElementProxy.MODE_PROCESS;      this._constructionElement = element;      this._baseURI = BaseURI;      this.guaranteeThatElementInCorrectSpace();   }   /**    * Returns the Element which was constructed by the Object.    *    * @return the Element which was constructed by the Object.    */   public final Element getElement() {      return this._constructionElement;   }   /**    * Returns the Element plus a leading and a trailing CarriageReturn Text node.    *    * @return the Element which was constructed by the Object.    */   public final NodeList getElementPlusReturns() {      HelperNodeList nl = new HelperNodeList();      nl.appendChild(this._doc.createTextNode("\n"));      nl.appendChild(this.getElement());      nl.appendChild(this._doc.createTextNode("\n"));      return nl;   }   /**    * Method getDocument    *    * @return the Document where this element is contained.    */   public Document getDocument() {      return this._doc;   }   /**    * Method getBaseURI    *    * @return the base uri of the namespace of this element    */   public String getBaseURI() {      return this._baseURI;   }   /**    * Method guaranteeThatElementInCorrectSpace    *    * @throws XMLSecurityException    */   public void guaranteeThatElementInCorrectSpace()           throws XMLSecurityException {      String localnameSHOULDBE = this.getBaseLocalName();      String namespaceSHOULDBE = this.getBaseNamespace();            String localnameIS = this._constructionElement.getLocalName();      String namespaceIS = this._constructionElement.getNamespaceURI();      if ( !localnameSHOULDBE.equals(localnameIS) ||        !namespaceSHOULDBE.equals(namespaceIS)) {               Object exArgs[] = { namespaceIS +":"+ localnameIS,            namespaceSHOULDBE +":"+ localnameSHOULDBE};         throw new XMLSecurityException("xml.WrongElement", exArgs);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?