/*
 * Copyright (c) 2003, 2021 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/**
 * <B>Jakarta XML Binding Provider Use Only:</b> Provides partial default implementations for
 * some of the <code>jakarta.xml.bind</code> interfaces.
 *
 * <p>
 * Jakarta XML Binding Providers can extend these classes and implement the abstract
 * methods.
 *
 * <p>
 * References in this document to JAXB refer to the Jakarta XML Binding unless otherwise noted.
 *
 * <h2>Package Specification</h2>
 *
 * <ul>
 * <li><a href="https://projects.eclipse.org/projects/ee4j.jaxb">Jakarta XML Binding Specification project</a>
 * </ul>
 *
 * <h2>Related Documentation</h2>
 * <p>
 * For overviews, tutorials, examples, guides, and tool documentation,
 * please see:
 * <ul>
 * <li>The <a href="https://projects.eclipse.org/projects/ee4j.jaxb">Jakarta XML Binding Website</a>
 * </ul>
 *
 * @see <a href="https://projects.eclipse.org/projects/ee4j.jaxb">Jakarta XML Binding Website</a>
 */
package jakarta.xml.bind.helpers;
