in src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/CanonicalizerBase.java [106:163]
protected List<XMLSecNamespace> getCurrentUtilizedNamespaces(final XMLSecStartElement xmlSecStartElement,
final C14NStack<XMLSecEvent> outputStack) {
List<XMLSecNamespace> utilizedNamespaces = Collections.emptyList();
XMLSecNamespace elementNamespace = xmlSecStartElement.getElementNamespace();
final XMLSecNamespace found = (XMLSecNamespace) outputStack.containsOnStack(elementNamespace);
//found means the prefix matched. so check the ns further
if (found == null || found.getNamespaceURI() == null
|| !found.getNamespaceURI().equals(elementNamespace.getNamespaceURI())) {
utilizedNamespaces = new ArrayList<>(2);
utilizedNamespaces.add(elementNamespace);
outputStack.peek().add(elementNamespace);
}
List<XMLSecNamespace> declaredNamespaces = xmlSecStartElement.getOnElementDeclaredNamespaces();
for (int i = 0; i < declaredNamespaces.size(); i++) {
XMLSecNamespace comparableNamespace = declaredNamespaces.get(i);
final XMLSecNamespace resultNamespace = (XMLSecNamespace) outputStack.containsOnStack(comparableNamespace);
//resultNamespace means the prefix matched. so check the ns further
if (resultNamespace != null && resultNamespace.getNamespaceURI() != null
&& resultNamespace.getNamespaceURI().equals(comparableNamespace.getNamespaceURI())) {
continue;
}
if (utilizedNamespaces == Collections.<XMLSecNamespace>emptyList()) {
utilizedNamespaces = new ArrayList<>(2);
}
utilizedNamespaces.add(comparableNamespace);
outputStack.peek().add(comparableNamespace);
}
List<XMLSecAttribute> comparableAttributes = xmlSecStartElement.getOnElementDeclaredAttributes();
for (int i = 0; i < comparableAttributes.size(); i++) {
XMLSecAttribute xmlSecAttribute = comparableAttributes.get(i);
XMLSecNamespace attributeNamespace = xmlSecAttribute.getAttributeNamespace();
if ("xml".equals(attributeNamespace.getPrefix())) {
continue;
}
if (attributeNamespace.getNamespaceURI() == null || attributeNamespace.getNamespaceURI().isEmpty()) {
continue;
}
final XMLSecNamespace resultNamespace = (XMLSecNamespace) outputStack.containsOnStack(attributeNamespace);
//resultNamespace means the prefix matched. so check the ns further
if (resultNamespace == null || resultNamespace.getNamespaceURI() == null
|| !resultNamespace.getNamespaceURI().equals(attributeNamespace.getNamespaceURI())) {
if (utilizedNamespaces == Collections.<XMLSecNamespace>emptyList()) {
utilizedNamespaces = new ArrayList<>(2);
}
utilizedNamespaces.add(attributeNamespace);
outputStack.peek().add(attributeNamespace);
}
}
return utilizedNamespaces;
}