in src/main/java/org/apache/servicemix/jbi/jaxp/XMLStreamHelper.java [234:280]
protected static String choosePrefix(XMLStreamWriter out, QName name, boolean declare) throws XMLStreamException {
String uri = name.getNamespaceURI();
// If no namespace
if (uri == null || XMLConstants.NULL_NS_URI.equals(uri)) {
if (!XMLConstants.NULL_NS_URI.equals(out.getNamespaceContext().getNamespaceURI(XMLConstants.DEFAULT_NS_PREFIX))) {
out.setPrefix(XMLConstants.DEFAULT_NS_PREFIX, XMLConstants.NULL_NS_URI);
}
return XMLConstants.DEFAULT_NS_PREFIX;
// Need to write a prefix
} else {
String defPrefix = name.getPrefix();
// A prefix is specified
if (defPrefix != null && !XMLConstants.DEFAULT_NS_PREFIX.equals(defPrefix)) {
// if the uri is bound to the specified prefix, good, else
if (!uri.equals(out.getNamespaceContext().getNamespaceURI(defPrefix))) {
// if there is a prefix bound to the uri, use it
if (out.getNamespaceContext().getPrefix(uri) != null) {
defPrefix = out.getNamespaceContext().getPrefix(uri);
// get prefix from the writer
} else if (out.getPrefix(uri) != null) {
defPrefix = out.getPrefix(uri);
// we need to bind the prefix
} else if (declare) {
out.setPrefix(defPrefix, uri);
out.writeNamespace(defPrefix, uri);
}
}
// No prefix specified
} else {
// if there is a prefix bound to the uri, use it
if (out.getNamespaceContext().getPrefix(uri) != null) {
defPrefix = out.getNamespaceContext().getPrefix(uri);
// get prefix from the writer
} else if (out.getPrefix(uri) != null) {
defPrefix = out.getPrefix(uri);
// we need to generate a prefix
} else {
defPrefix = getUniquePrefix(out);
if (declare) {
out.setPrefix(defPrefix, uri);
out.writeNamespace(defPrefix, uri);
}
}
}
return defPrefix;
}
}