< prev index next >

src/java.xml.bind/share/classes/com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper.java

Print this page




 108      *      return "" to map this namespace URI to the default namespace.
 109      *      Again, there's no guarantee that this preference will be
 110      *      honored.
 111      *
 112      *      If this method returns "" when requirePrefix=true, the return
 113      *      value will be ignored and the system will generate one.
 114      *
 115      * @since JAXB 1.0.1
 116      */
 117     public abstract String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix);
 118 
 119     /**
 120      * Returns a list of namespace URIs that should be declared
 121      * at the root element.
 122      *
 123      * <p>
 124      * By default, the JAXB RI 1.0.x produces namespace declarations only when
 125      * they are necessary, only at where they are used. Because of this
 126      * lack of look-ahead, sometimes the marshaller produces a lot of
 127      * namespace declarations that look redundant to human eyes. For example,
 128      * <pre><xmp>
 129      * <?xml version="1.0"?>
 130      * <root>
 131      *   <ns1:child xmlns:ns1="urn:foo"> ... </ns1:child>
 132      *   <ns2:child xmlns:ns2="urn:foo"> ... </ns2:child>
 133      *   <ns3:child xmlns:ns3="urn:foo"> ... </ns3:child>
 134      *   ...
 135      * </root>
 136      * </xmp></pre>
 137      *
 138      * <p>
 139      * The JAXB RI 2.x mostly doesn't exhibit this behavior any more,
 140      * as it declares all statically known namespace URIs (those URIs
 141      * that are used as element/attribute names in JAXB annotations),
 142      * but it may still declare additional namespaces in the middle of
 143      * a document, for example when (i) a QName as an attribute/element value
 144      * requires a new namespace URI, or (ii) DOM nodes as a portion of an object
 145      * tree requires a new namespace URI.
 146      *
 147      * <p>
 148      * If you know in advance that you are going to use a certain set of
 149      * namespace URIs, you can override this method and have the marshaller
 150      * declare those namespace URIs at the root element.
 151      *
 152      * <p>
 153      * For example, by returning <code>new String[]{"urn:foo"}</code>,
 154      * the marshaller will produce:
 155      * <pre><xmp>
 156      * <?xml version="1.0"?>
 157      * <root xmlns:ns1="urn:foo">
 158      *   <ns1:child> ... </ns1:child>
 159      *   <ns1:child> ... </ns1:child>
 160      *   <ns1:child> ... </ns1:child>
 161      *   ...
 162      * </root>
 163      * </xmp></pre>
 164      * <p>
 165      * To control prefixes assigned to those namespace URIs, use the
 166      * {@link #getPreferredPrefix(String, String, boolean)} method.
 167      *
 168      * @return
 169      *      A list of namespace URIs as an array of {@link String}s.
 170      *      This method can return a length-zero array but not null.
 171      *      None of the array component can be null. To represent
 172      *      the empty namespace, use the empty string <code>""</code>.
 173      *
 174      * @since
 175      *      JAXB RI 1.0.2
 176      */
 177     public String[] getPreDeclaredNamespaceUris() {
 178         return EMPTY_STRING;
 179     }
 180 
 181     /**
 182      * Similar to {@link #getPreDeclaredNamespaceUris()} but allows the
 183      * (prefix,nsUri) pairs to be returned.


 215      * of the larger document and avoid declaring redundant namespace URIs.
 216      *
 217      * <p>
 218      * This is automatically done when you are marshalling to {@link XMLStreamWriter},
 219      * {@link XMLEventWriter}, {@link DOMResult}, or {@link Node}, because
 220      * those output format allows us to inspect what's currently available
 221      * as in-scope namespace binding. However, with other output format,
 222      * such as {@link OutputStream}, the JAXB RI cannot do this automatically.
 223      * That's when this method comes into play.
 224      *
 225      * <p>
 226      * Namespace bindings returned by this method will be used by the JAXB RI,
 227      * but will not be re-declared. They are assumed to be available when you insert
 228      * this subtree into a bigger document.
 229      *
 230      * <p>
 231      * It is <b>NOT</b> OK to return  the same binding, or give
 232      * the receiver a conflicting binding information.
 233      * It's a responsibility of the caller to make sure that this doesn't happen
 234      * even if the ancestor elements look like:
 235      * <pre><xmp>
 236      *   <foo:abc xmlns:foo="abc">
 237      *     <foo:abc xmlns:foo="def">
 238      *       <foo:abc xmlns:foo="abc">
 239      *         ... JAXB marshalling into here.
 240      *       </foo:abc>
 241      *     </foo:abc>
 242      *   </foo:abc>
 243      * </xmp></pre>
 244      *
 245      * @return
 246      *      always return a non-null (but possibly empty) array. The array stores
 247      *      data like (prefix1,nsUri1,prefix2,nsUri2,...) Use an empty string to represent
 248      *      the empty namespace URI and the default prefix. Null is not allowed as a value
 249      *      in the array.
 250      *
 251      * @since JAXB RI 2.0 beta
 252      */
 253     public String[] getContextualNamespaceDecls() {
 254         return EMPTY_STRING;
 255     }
 256 }


 108      *      return "" to map this namespace URI to the default namespace.
 109      *      Again, there's no guarantee that this preference will be
 110      *      honored.
 111      *
 112      *      If this method returns "" when requirePrefix=true, the return
 113      *      value will be ignored and the system will generate one.
 114      *
 115      * @since JAXB 1.0.1
 116      */
 117     public abstract String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix);
 118 
 119     /**
 120      * Returns a list of namespace URIs that should be declared
 121      * at the root element.
 122      *
 123      * <p>
 124      * By default, the JAXB RI 1.0.x produces namespace declarations only when
 125      * they are necessary, only at where they are used. Because of this
 126      * lack of look-ahead, sometimes the marshaller produces a lot of
 127      * namespace declarations that look redundant to human eyes. For example,
 128      * <pre>{@code
 129      * <?xml version="1.0"?>
 130      * <root>
 131      *   <ns1:child xmlns:ns1="urn:foo"> ... </ns1:child>
 132      *   <ns2:child xmlns:ns2="urn:foo"> ... </ns2:child>
 133      *   <ns3:child xmlns:ns3="urn:foo"> ... </ns3:child>
 134      *   ...
 135      * </root>
 136      * }</pre>
 137      *
 138      * <p>
 139      * The JAXB RI 2.x mostly doesn't exhibit this behavior any more,
 140      * as it declares all statically known namespace URIs (those URIs
 141      * that are used as element/attribute names in JAXB annotations),
 142      * but it may still declare additional namespaces in the middle of
 143      * a document, for example when (i) a QName as an attribute/element value
 144      * requires a new namespace URI, or (ii) DOM nodes as a portion of an object
 145      * tree requires a new namespace URI.
 146      *
 147      * <p>
 148      * If you know in advance that you are going to use a certain set of
 149      * namespace URIs, you can override this method and have the marshaller
 150      * declare those namespace URIs at the root element.
 151      *
 152      * <p>
 153      * For example, by returning <code>new String[]{"urn:foo"}</code>,
 154      * the marshaller will produce:
 155      * <pre>{@code
 156      * <?xml version="1.0"?>
 157      * <root xmlns:ns1="urn:foo">
 158      *   <ns1:child> ... </ns1:child>
 159      *   <ns1:child> ... </ns1:child>
 160      *   <ns1:child> ... </ns1:child>
 161      *   ...
 162      * </root>
 163      * }</pre>
 164      * <p>
 165      * To control prefixes assigned to those namespace URIs, use the
 166      * {@link #getPreferredPrefix(String, String, boolean)} method.
 167      *
 168      * @return
 169      *      A list of namespace URIs as an array of {@link String}s.
 170      *      This method can return a length-zero array but not null.
 171      *      None of the array component can be null. To represent
 172      *      the empty namespace, use the empty string <code>""</code>.
 173      *
 174      * @since
 175      *      JAXB RI 1.0.2
 176      */
 177     public String[] getPreDeclaredNamespaceUris() {
 178         return EMPTY_STRING;
 179     }
 180 
 181     /**
 182      * Similar to {@link #getPreDeclaredNamespaceUris()} but allows the
 183      * (prefix,nsUri) pairs to be returned.


 215      * of the larger document and avoid declaring redundant namespace URIs.
 216      *
 217      * <p>
 218      * This is automatically done when you are marshalling to {@link XMLStreamWriter},
 219      * {@link XMLEventWriter}, {@link DOMResult}, or {@link Node}, because
 220      * those output format allows us to inspect what's currently available
 221      * as in-scope namespace binding. However, with other output format,
 222      * such as {@link OutputStream}, the JAXB RI cannot do this automatically.
 223      * That's when this method comes into play.
 224      *
 225      * <p>
 226      * Namespace bindings returned by this method will be used by the JAXB RI,
 227      * but will not be re-declared. They are assumed to be available when you insert
 228      * this subtree into a bigger document.
 229      *
 230      * <p>
 231      * It is <b>NOT</b> OK to return  the same binding, or give
 232      * the receiver a conflicting binding information.
 233      * It's a responsibility of the caller to make sure that this doesn't happen
 234      * even if the ancestor elements look like:
 235      * <pre>{@code
 236      *   <foo:abc xmlns:foo="abc">
 237      *     <foo:abc xmlns:foo="def">
 238      *       <foo:abc xmlns:foo="abc">
 239      *         ... JAXB marshalling into here.
 240      *       </foo:abc>
 241      *     </foo:abc>
 242      *   </foo:abc>
 243      * }</pre>
 244      *
 245      * @return
 246      *      always return a non-null (but possibly empty) array. The array stores
 247      *      data like (prefix1,nsUri1,prefix2,nsUri2,...) Use an empty string to represent
 248      *      the empty namespace URI and the default prefix. Null is not allowed as a value
 249      *      in the array.
 250      *
 251      * @since JAXB RI 2.0 beta
 252      */
 253     public String[] getContextualNamespaceDecls() {
 254         return EMPTY_STRING;
 255     }
 256 }
< prev index next >