/*
 * 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
 */

/**
 * Provides a runtime binding framework for client applications including
 * unmarshalling, marshalling, and validation capabilities.
 * <p>
 * <p>
 * <code>JAXBContext</code> is the client-entry point to the runtime binding
 * framework.
 * <p>
 * <p>
 * References in this document to JAXB refer to the Jakarta XML Binding unless otherwise noted.
 *
 * <h2>Package Specification</h2>
 * <p>
 * <ul>
 * <li><a href="https://projects.eclipse.org/projects/ee4j.jaxb">Jakarta XML Binding Specification project</a>
 * </ul>
 * <p>
 * <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;
