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. Typically this value comes from 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.

Returns:

null if there's no preferred prefix for the namespace URI.
In this case, the system will generate a prefix for you.
Otherwise the system will try to use the returned prefix,
but generally there's no guarantee if the prefix will be
actually used or not.
return "" to map this namespace URI to the default namespace.
Again, there's no guarantee that this preference will be
honored.
If this method returns "" when requirePrefix=true, the return
value will be ignored and the system will generate one.

getPreDeclaredNamespaceUris

Returns a list of namespace URIs that should be declared
at the root element.

By default, the JAXB RI produces namespace declarations only when
they are necessary, only at where they are used. Because of this
lack of look-ahead, sometimes the marshaller produces a lot of
namespace declarations that look redundant to human eyes. For example,

... ... ...
...

If you know in advance that you are going to use a certain set of
namespace URIs, you can override this method and have the marshaller
declare those namespace URIs at the root element.

For example, by returning new String[]{"urn:foo"},
the marshaller will produce:

A list of namespace URIs as an array of Strings.
This method can return a length-zero array but not null.
None of the array component can be null. To represent
the empty namespace, use the empty string "".