예제 #1
0
  private Set getNodeSet(List nodeFilters) {
    if (xi.isNeedsToBeExpanded()) {
      XMLUtils.circumventBug2650(XMLUtils.getOwnerDocument(xi.getSubNode()));
    }

    Set inputSet = new LinkedHashSet();
    XMLUtils.getSet(xi.getSubNode(), inputSet, null, !xi.isExcludeComments());
    Set nodeSet = new LinkedHashSet();
    Iterator i = inputSet.iterator();
    while (i.hasNext()) {
      Node currentNode = (Node) i.next();
      Iterator it = nodeFilters.iterator();
      boolean skipNode = false;
      while (it.hasNext() && !skipNode) {
        NodeFilter nf = (NodeFilter) it.next();
        if (nf.isNodeInclude(currentNode) != 1) {
          skipNode = true;
        }
      }
      if (!skipNode) {
        nodeSet.add(currentNode);
      }
    }
    return nodeSet;
  }
예제 #2
0
 void circumventBugIfNeeded(XMLSignatureInput input)
     throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
   if (!input.isNeedsToBeExpanded()) return;
   Document doc = null;
   if (input.getSubNode() != null) {
     doc = XMLUtils.getOwnerDocument(input.getSubNode());
   } else {
     doc = XMLUtils.getOwnerDocument(input.getNodeSet());
   }
   XMLUtils.circumventBug2650(doc);
 }
예제 #3
0
 private static Data copyDerefData(Data dereferencedData) {
   if (dereferencedData instanceof ApacheData) {
     // need to make a copy of the Data
     ApacheData ad = (ApacheData) dereferencedData;
     XMLSignatureInput xsi = ad.getXMLSignatureInput();
     if (xsi.isNodeSet()) {
       try {
         final Set s = xsi.getNodeSet();
         return new NodeSetData() {
           public Iterator iterator() {
             return s.iterator();
           }
         };
       } catch (Exception e) {
         // log a warning
         log.log(Level.WARNING, "cannot cache dereferenced data: " + e);
         return null;
       }
     } else if (xsi.isElement()) {
       return new DOMSubTreeData(xsi.getSubNode(), xsi.isExcludeComments());
     } else if (xsi.isOctetStream() || xsi.isByteArray()) {
       try {
         return new OctetStreamData(xsi.getOctetStream(), xsi.getSourceURI(), xsi.getMIMEType());
       } catch (IOException ioe) {
         // log a warning
         log.log(Level.WARNING, "cannot cache dereferenced data: " + ioe);
         return null;
       }
     }
   }
   return dereferencedData;
 }
 private static Element obtainRefrenceElement(XMLSignatureInput resource)
     throws CanonicalizationException, ParserConfigurationException, IOException, SAXException,
         KeyResolverException {
   Element e;
   if (resource.isElement()) {
     e = (Element) resource.getSubNode();
   } else if (resource.isNodeSet()) {
     // Retrieved resource is a nodeSet
     e = getDocumentElement(resource.getNodeSet());
   } else {
     // Retrieved resource is an inputStream
     byte inputBytes[] = resource.getBytes();
     e = getDocFromBytes(inputBytes);
     // otherwise, we parse the resource, create an Element and delegate
     if (log.isLoggable(java.util.logging.Level.FINE))
       log.log(java.util.logging.Level.FINE, "we have to parse " + inputBytes.length + " bytes");
   }
   return e;
 }