#
# 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
#


ContextFinder.ProviderNotFound = \
	Provider {0} not found

ContextFinder.DefaultProviderNotFound = \
	Implementation of Jakarta XML Binding-API has not been found on module path or classpath.
	
ContextFinder.CouldNotInstantiate = \
	Provider {0} could not be instantiated: {1}	

ContextFinder.CantFindPropertiesFile = \
	Unable to locate jaxb.properties for package {0}
	
ContextFinder.CantMixProviders = \
	You may not mix Jakarta XML Binding Providers on the context path
	
ContextFinder.MissingProperty = \
	jaxb.properties in package {0} does not contain the {1} property.

ContextFinder.NoPackageInContextPath = \
    No package name is given

ContextFinder.ErrorLoadClass = \
    Error loading class {0} listed in {1}, make sure that entries are accessable \
    on CLASSPATH and of the form ClassName or OuterClass.InnerClass \
    not ClassName.class or fully.qualified.ClassName

PropertyException.NameValue = \
	name: {0} value: {1}
	
DatatypeConverter.ConverterMustNotBeNull = \
	The DatatypeConverterInterface parameter must not be null
	
JAXBContext.IllegalCast = \
    ClassCastException: attempting to cast {0} to {1}.  Please make sure that you are specifying the proper ClassLoader.    

JAXBClasses.notOpen = \
    Package {0} with Jakarta XML Binding class {1} defined in a module {2} must be open to at least jakarta.xml.bind module.
