public void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException {
    super.marshalParams(parent, context);
    XPathFilter2ParameterSpec xp = (XPathFilter2ParameterSpec) getParameterSpec();
    String prefix = DOMUtils.getNSPrefix(context, Transform.XPATH2);
    String qname = (prefix == null || prefix.length() == 0) ? "xmlns" : "xmlns:" + prefix;
    @SuppressWarnings("unchecked")
    List<XPathType> xpathList = xp.getXPathList();
    for (XPathType xpathType : xpathList) {
      Element elem = DOMUtils.createElement(ownerDoc, "XPath", Transform.XPATH2, prefix);
      elem.appendChild(ownerDoc.createTextNode(xpathType.getExpression()));
      DOMUtils.setAttribute(elem, "Filter", xpathType.getFilter().toString());
      elem.setAttributeNS("http://www.w3.org/2000/xmlns/", qname, Transform.XPATH2);

      // add namespace attributes, if necessary
      @SuppressWarnings("unchecked")
      Set<Map.Entry<String, String>> entries = xpathType.getNamespaceMap().entrySet();
      for (Map.Entry<String, String> entry : entries) {
        elem.setAttributeNS(
            "http://www.w3.org/2000/xmlns/", "xmlns:" + entry.getKey(), entry.getValue());
      }

      transformElem.appendChild(elem);
    }
  }
Пример #2
0
  private static boolean paramsEqual(
      XPathFilter2ParameterSpec spec1, XPathFilter2ParameterSpec spec2) {

    List types = spec1.getXPathList();
    List otypes = spec2.getXPathList();
    int size = types.size();
    if (size != otypes.size()) {
      return false;
    }
    for (int i = 0; i < size; i++) {
      XPathType type = (XPathType) types.get(i);
      XPathType otype = (XPathType) otypes.get(i);
      if (!type.getExpression().equals(otype.getExpression())
          || !type.getNamespaceMap().equals(otype.getNamespaceMap())
          || type.getFilter() != otype.getFilter()) {
        return false;
      }
    }
    return true;
  }