in src/main/java/org/apache/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java [119:186]
public Data canonicalize(Data data, XMLCryptoContext xc, OutputStream os)
throws TransformException
{
if (canonicalizer == null) {
try {
canonicalizer = Canonicalizer.getInstance(getAlgorithm());
LOG.log(Level.DEBUG, "Created canonicalizer for algorithm: {0}", getAlgorithm());
} catch (InvalidCanonicalizerException ice) {
throw new TransformException
("Couldn't find Canonicalizer for: " + getAlgorithm() +
": " + ice.getMessage(), ice);
}
}
boolean isByteArrayOutputStream = os == null;
OutputStream writer = isByteArrayOutputStream ? new ByteArrayOutputStream() : os;
try {
boolean secVal = Utils.secureValidation(xc);
Set<Node> nodeSet = null;
if (data instanceof ApacheData) {
XMLSignatureInput in =
((ApacheData)data).getXMLSignatureInput();
if (in.isElement()) {
if (inclusiveNamespaces != null) {
canonicalizer.canonicalizeSubtree(in.getSubNode(), inclusiveNamespaces, writer);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
} else {
canonicalizer.canonicalizeSubtree(in.getSubNode(), writer);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
}
} else if (in.isNodeSet()) {
nodeSet = in.getNodeSet();
} else {
canonicalizer.canonicalize(Utils.readBytesFromStream(in.getUnprocessedInput()), writer, secVal);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
}
} else if (data instanceof DOMSubTreeData) {
DOMSubTreeData subTree = (DOMSubTreeData)data;
if (inclusiveNamespaces != null) {
canonicalizer.canonicalizeSubtree(subTree.getRoot(), inclusiveNamespaces, writer);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
} else {
canonicalizer.canonicalizeSubtree(subTree.getRoot(), writer);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
}
} else if (data instanceof NodeSetData) {
NodeSetData nsd = (NodeSetData)data;
// convert Iterator to Set
@SuppressWarnings("unchecked")
Set<Node> ns = Utils.toNodeSet(nsd.iterator());
nodeSet = ns;
LOG.log(Level.DEBUG, "Canonicalizing {0} nodes", nodeSet.size());
} else {
canonicalizer.canonicalize(Utils.readBytesFromStream(((OctetStreamData)data).getOctetStream()), writer, secVal);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
}
if (inclusiveNamespaces != null) {
canonicalizer.canonicalizeXPathNodeSet(nodeSet, inclusiveNamespaces, writer);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
} else {
canonicalizer.canonicalizeXPathNodeSet(nodeSet, writer);
return new OctetStreamData(new ByteArrayInputStream(getC14nBytes(writer, isByteArrayOutputStream)));
}
} catch (Exception e) {
throw new TransformException(e);
}
}