WEB开发网
开发学院软件开发Java 使用 Java 验证 Lotus Forms XML 数字签名 阅读

使用 Java 验证 Lotus Forms XML 数字签名

 2010-01-15 00:00:00 来源:WEB开发网   
核心提示: 由于父节点的名称空间前缀可以被一个子节点覆盖,比如默认名称空间,使用 Java 验证 Lotus Forms XML 数字签名(4),因此如果名称空间已被复制到目标,那么就不会再次复制该名称空间,这种方法遵守名称空间覆盖规则,因此只有距离最近的名称空间定义是有效的

由于父节点的名称空间前缀可以被一个子节点覆盖,比如默认名称空间,因此如果名称空间已被复制到目标,那么就不会再次复制该名称空间。这种方法遵守名称空间覆盖规则,因此只有距离最近的名称空间定义是有效的。


清单 3. 将名称空间从源节点的所有祖先复制到目标节点的代码
private void cloneNamespaces(Element src, Element target) { 
  HashMap copiedNamespaces = new HashMap(); 
 
  Node node = src; 
  while (node != null && node.getNodeType() == Node.ELEMENT_NODE) { 
    NamedNodeMap attributes = node.getAttributes(); 
    for (int i = 0; i < attributes.getLength(); i++) { 
      Attr attr = (Attr) attributes.item(i); 
      String namespaceUri = attr.getNamespaceURI(); 
      if (!XML_NS_URI.equals(namespaceUri)) { 
        // a normal attribute, don't copy it 
        continue; 
      } 
 
      String nodeValue = attr.getNodeValue(); 
      String localName = attr.getLocalName(); 
      String prefix = attr.getPrefix(); 
      String qualifiedName = (prefix == null) ? localName : prefix 
          + ":" + localName; //$NON-NLS-1$ 
 
      // don't overwrite namespace already copied. 
      if (copiedNamespaces.containsKey(qualifiedName)) { 
        continue; 
      } 
 
      Document factory = target.getOwnerDocument(); 
      Attr newAttr = factory.createAttributeNS(namespaceUri, 
          qualifiedName); 
      newAttr.setNodeValue(nodeValue); 
      target.setAttributeNodeNS(newAttr); 
 
      copiedNamespaces.put(qualifiedName, nodeValue); 
    } 
 
    node = node.getParentNode(); 
  } 
} 

上一页  1 2 3 4 5 6  下一页

Tags:使用 Java 验证

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接