private OMNamespace findDeclaredNamespace(String uri, String prefix) {
if (uri == null) {
Attr decl = (Attr)attributes.getNamedItemNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI,
prefix.length() == 0 ? XMLConstants.XMLNS_ATTRIBUTE : prefix);
return decl == null ? null : new OMNamespaceImpl(decl.getValue(), prefix);
}
// If the prefix is available and uri is available and its the xml
// namespace
if (prefix != null && prefix.equals(OMConstants.XMLNS_PREFIX)
&& uri.equals(OMConstants.XMLNS_URI)) {
return new OMNamespaceImpl(uri, prefix);
}
if (prefix == null || "".equals(prefix)) {
for (int i=0; i<attributes.getLength(); i++) {
Attr attr = (Attr)attributes.item(i);
if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(attr.getNamespaceURI())) {
String declaredUri = attr.getValue();
if (declaredUri.equals(uri)) {
return new OMNamespaceImpl(uri, attr.getPrefix() == null ? "" : attr.getLocalName());
}
}
}
} else {
Attr decl = (Attr)attributes.getNamedItemNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, prefix);
if (decl != null) {
String declaredUri = decl.getValue();
if (declaredUri.equals(uri)) {
return new OMNamespaceImpl(uri, prefix);
}
}
}
return null;