< prev index next >
src/java.xml.bind/share/classes/javax/xml/bind/JAXBContext.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -25,15 +25,15 @@
package javax.xml.bind;
import org.w3c.dom.Node;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
-import java.io.IOException;
-import java.io.InputStream;
/**
* The {@code JAXBContext} class provides the client's entry point to the
* JAXB API. It provides an abstraction for managing the XML/Java binding
* information necessary to implement the JAXB binding framework operations:
@@ -330,11 +330,18 @@
* This is a convenience method to invoke the
* {@link #newInstance(String,ClassLoader)} method with
* the context class loader of the current thread.
*
* @throws JAXBException if an error was encountered while creating the
- * {@code JAXBContext}. See {@link JAXBContext#newInstance(String, ClassLoader, Map)} for details.
+ * {@code JAXBContext} such as
+ * <ol>
+ * <li>failure to locate either ObjectFactory.class or jaxb.index in the packages</li>
+ * <li>an ambiguity among global elements contained in the contextPath</li>
+ * <li>failure to locate a value for the context factory provider property</li>
+ * <li>mixing schema derived packages from different providers on the same contextPath</li>
+ * <li>packages are not open to {@code java.xml.bind} module</li>
+ * </ol>
*/
public static JAXBContext newInstance( String contextPath )
throws JAXBException {
//return newInstance( contextPath, JAXBContext.class.getClassLoader() );
@@ -412,20 +419,30 @@
* being thrown.
*
* <p>
* The steps involved in discovering the JAXB implementation is discussed in the class javadoc.
*
- * @param contextPath list of java package names that contain schema
+ * @param contextPath
+ * List of java package names that contain schema
* derived class and/or java to schema (JAXB-annotated)
- * mapped classes
+ * mapped classes.
+ * Packages in {@code contextPath} that are in named modules must be
+ * {@linkplain java.lang.reflect.Module#isOpen open} to at least the {@code java.xml.bind} module.
* @param classLoader
* This class loader will be used to locate the implementation
* classes.
*
* @return a new instance of a {@code JAXBContext}
* @throws JAXBException if an error was encountered while creating the
- * {@code JAXBContext}. See {@link JAXBContext#newInstance(String, ClassLoader, Map)} for details.
+ * {@code JAXBContext} such as
+ * <ol>
+ * <li>failure to locate either ObjectFactory.class or jaxb.index in the packages</li>
+ * <li>an ambiguity among global elements contained in the contextPath</li>
+ * <li>failure to locate a value for the context factory provider property</li>
+ * <li>mixing schema derived packages from different providers on the same contextPath</li>
+ * <li>packages are not open to {@code java.xml.bind} module</li>
+ * </ol>
*/
public static JAXBContext newInstance( String contextPath, ClassLoader classLoader ) throws JAXBException {
return newInstance(contextPath,classLoader,Collections.<String,Object>emptyMap());
}
@@ -440,11 +457,16 @@
*
* <p>
* The interpretation of properties is up to implementations. Implementations must
* throw {@code JAXBException} if it finds properties that it doesn't understand.
*
- * @param contextPath list of java package names that contain schema derived classes
+ * @param contextPath
+ * List of java package names that contain schema
+ * derived class and/or java to schema (JAXB-annotated)
+ * mapped classes.
+ * Packages in {@code contextPath} that are in named modules must be
+ * {@linkplain java.lang.reflect.Module#isOpen open} to at least the {@code java.xml.bind} module.
* @param classLoader
* This class loader will be used to locate the implementation classes.
* @param properties
* provider-specific properties. Can be null, which means the same thing as passing
* in an empty map.
@@ -455,10 +477,11 @@
* <ol>
* <li>failure to locate either ObjectFactory.class or jaxb.index in the packages</li>
* <li>an ambiguity among global elements contained in the contextPath</li>
* <li>failure to locate a value for the context factory provider property</li>
* <li>mixing schema derived packages from different providers on the same contextPath</li>
+ * <li>packages are not open to {@code java.xml.bind} module</li>
* </ol>
* @since 1.6, JAXB 2.0
*/
public static JAXBContext newInstance( String contextPath,
ClassLoader classLoader,
@@ -586,19 +609,31 @@
*
* <p>
* The steps involved in discovering the JAXB implementation is discussed in the class javadoc.
*
* @param classesToBeBound
- * list of java classes to be recognized by the new {@link JAXBContext}.
+ * List of java classes to be recognized by the new {@link JAXBContext}.
+ * Classes in {@code classesToBeBound} that are in named modules must be in a package
+ * that is {@linkplain java.lang.reflect.Module#isOpen open} to at least the {@code java.xml.bind} module.
* Can be empty, in which case a {@link JAXBContext} that only knows about
* spec-defined classes will be returned.
*
* @return
* A new instance of a {@code JAXBContext}.
*
- * @throws JAXBException if an error was encountered while creating the
- * {@code JAXBContext}. See {@link JAXBContext#newInstance(Class[], Map)} for details.
+ * @throws JAXBException
+ * if an error was encountered while creating the
+ * {@code JAXBContext}, such as (but not limited to):
+ * <ol>
+ * <li>No JAXB implementation was discovered
+ * <li>Classes use JAXB annotations incorrectly
+ * <li>Classes have colliding annotations (i.e., two classes with the same type name)
+ * <li>The JAXB implementation was unable to locate
+ * provider-specific out-of-band information (such as additional
+ * files generated at the development time.)
+ * <li>{@code classesToBeBound} are not open to {@code java.xml.bind} module
+ * </ol>
*
* @throws IllegalArgumentException
* if the parameter contains {@code null} (i.e., {@code newInstance(null);})
*
* @since 1.6, JAXB 2.0
@@ -619,11 +654,13 @@
* <p>
* The interpretation of properties is up to implementations. Implementations must
* throw {@code JAXBException} if it finds properties that it doesn't understand.
*
* @param classesToBeBound
- * list of java classes to be recognized by the new {@link JAXBContext}.
+ * List of java classes to be recognized by the new {@link JAXBContext}.
+ * Classes in {@code classesToBeBound} that are in named modules must be in a package
+ * that is {@linkplain java.lang.reflect.Module#isOpen open} to at least the {@code java.xml.bind} module.
* Can be empty, in which case a {@link JAXBContext} that only knows about
* spec-defined classes will be returned.
* @param properties
* provider-specific properties. Can be null, which means the same thing as passing
* in an empty map.
@@ -639,10 +676,11 @@
* <li>Classes use JAXB annotations incorrectly
* <li>Classes have colliding annotations (i.e., two classes with the same type name)
* <li>The JAXB implementation was unable to locate
* provider-specific out-of-band information (such as additional
* files generated at the development time.)
+ * <li>{@code classesToBeBound} are not open to {@code java.xml.bind} module
* </ol>
*
* @throws IllegalArgumentException
* if the parameter contains {@code null} (i.e., {@code newInstance(null,someMap);})
*
< prev index next >