public final class NamespaceMapper extends NamespacePrefixMapper
Constructor and Description |
---|
NamespaceMapper(Map<String,String> nspref) |
Modifier and Type | Method and Description |
---|---|
String[] |
getContextualNamespaceDecls()
Returns a list of (prefix,namespace URI) pairs that represents
namespace bindings available on ancestor elements (that need not be repeated
by the JAXB RI.)
|
String |
getPreferredPrefix(String namespaceUri,
String suggestion,
boolean requirePrefix)
Returns a preferred prefix for the given namespace URI.
|
void |
setContextualNamespace(String[] contextualNamespaceDecls) |
getPreDeclaredNamespaceUris, getPreDeclaredNamespaceUris2
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix)
NamespacePrefixMapper
As noted in the return value portion of the javadoc, there are several cases where the preference cannot be honored. Specifically, as of JAXB RI 2.0 and onward:
String
), partly to simplify the marshaller.
JAXBContext
includes classes that use the empty namespace URI. This allows
the JAXB RI to reserve the "" prefix for the empty namespace URI,
which is the only possible prefix for the URI.
This restriction is also to simplify the marshaller.
getPreferredPrefix
in class NamespacePrefixMapper
namespaceUri
- The namespace URI for which the prefix needs to be found.
Never be null. "" is used to denote the default namespace.suggestion
- When the content tree has a suggestion for the prefix
to the given namespaceUri, that suggestion is passed as a
parameter. Typicall this value comes from the QName.getPrefix
to show the preference of the content tree. This parameter
may be null, and this parameter may represent an already
occupied prefix.requirePrefix
- If this method is expected to return non-empty prefix.
When this flag is true, it means that the given namespace URI
cannot be set as the default namespace.public void setContextualNamespace(String[] contextualNamespaceDecls)
public String[] getContextualNamespaceDecls()
NamespacePrefixMapper
Sometimes JAXB is used to marshal an XML document, which will be used as a subtree of a bigger document. When this happens, it's nice for a JAXB marshaller to be able to use in-scope namespace bindings of the larger document and avoid declaring redundant namespace URIs.
This is automatically done when you are marshalling to XMLStreamWriter
,
XMLEventWriter
, DOMResult
, or Node
, because
those output format allows us to inspect what's currently available
as in-scope namespace binding. However, with other output format,
such as OutputStream
, the JAXB RI cannot do this automatically.
That's when this method comes into play.
Namespace bindings returned by this method will be used by the JAXB RI, but will not be re-declared. They are assumed to be available when you insert this subtree into a bigger document.
It is NOT OK to return the same binding, or give the receiver a conflicting binding information. It's a responsibility of the caller to make sure that this doesn't happen even if the ancestor elements look like:
<foo:abc xmlns:foo="abc">
<foo:abc xmlns:foo="def">
<foo:abc xmlns:foo="abc">
... JAXB marshalling into here.
</foo:abc>
</foo:abc>
</foo:abc>
getContextualNamespaceDecls
in class NamespacePrefixMapper
Copyright © 2019 JBoss by Red Hat. All rights reserved.