com.sun.xml.bind.DefaultJAXBContextImpl Maven / Gradle / Ivy
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.xml.bind;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.PropertyException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.Validator;
import com.sun.msv.grammar.Grammar;
import com.sun.xml.bind.marshaller.MarshallerImpl;
import com.sun.xml.bind.unmarshaller.UnmarshallerImpl;
import com.sun.xml.bind.validator.ValidatorImpl;
/**
* This class provides the default implementation of JAXBContext. It
* also creates the GrammarInfoFacade that unifies all of the grammar
* info from packages on the contextPath.
*
* @since JAXB1.0
* @deprecated in JAXB1.0.1
*/
public class DefaultJAXBContextImpl extends JAXBContext {
/** property name used to store the build id **/
public static final String JAXB_RI_BUILD_ID = "jaxb.ri.build.id";
// build version id
private String buildVersionId = Messages.format( Messages.BUILD_ID );
/**
* This object keeps information about the grammar.
*
* When more than one package are specified,
* GrammarInfoFacade is used.
*/
private GrammarInfo gi = null;
/**
* This is the constructor used by javax.xml.bind.FactoryFinder which
* bootstraps the RI. It causes the construction of a JAXBContext that
* contains a GrammarInfoFacade which is the union of all the generated
* JAXBContextImpl objects on the contextPath.
*/
public DefaultJAXBContextImpl( String contextPath, ClassLoader classLoader )
throws JAXBException {
this( GrammarInfoFacade.createGrammarInfoFacade( contextPath, classLoader ) );
}
/**
* This constructor is used by the default no-arg constructor in the
* generated JAXBContextImpl objects. It is also used by the
* bootstrapping constructor in this class.
*/
public DefaultJAXBContextImpl( GrammarInfo gi ) {
this.gi = gi;
}
public GrammarInfo getGrammarInfo() {
return gi;
}
public Grammar getGrammar() throws JAXBException { return gi.getGrammar(); }
/**
* Create a Marshaller
object that can be used to convert a
* java content-tree into XML data.
*
* @return a Marshaller
object
* @throws JAXBException if an error was encountered while creating the
* Marshaller
object
*/
public Marshaller createMarshaller() throws JAXBException {
return new MarshallerImpl();
}
/**
* Create an Unmarshaller
object that can be used to convert XML
* data into a java content-tree.
*
* @return an Unmarshaller
object
* @throws JAXBException if an error was encountered while creating the
* Unmarshaller
object
*/
public Unmarshaller createUnmarshaller() throws JAXBException {
// TODO: revisit TypeRegistry.
// we don't need to create TypeRegistry everytime we create unmarshaller.
return new UnmarshallerImpl( this, new TypeRegistry( gi ) );
}
/**
* Create a Validator
object that can be used to validate a
* java content-tree.
*
* @return an Unmarshaller
object
* @throws JAXBException if an error was encountered while creating the
* Validator
object
*/
public Validator createValidator() throws JAXBException {
return new ValidatorImpl();
}
/**
* Create an instance of the specified Java content interface.
*
* @param javaContentInterface the Class object
* @return
* @exception JAXBException
*/
public Object newInstance( Class javaContentInterface )
throws JAXBException {
if( javaContentInterface == null ) {
throw new JAXBException( Messages.format( Messages.CI_NOT_NULL ) );
}
try {
Class c = gi.getDefaultImplementation( javaContentInterface );
if(c==null)
throw new JAXBException(
Messages.format( Messages.MISSING_INTERFACE, javaContentInterface ));
return c.newInstance();
} catch( Exception e ) {
throw new JAXBException( e );
}
}
/**
* There are no required properties, so simply throw an exception. Other
* providers may have support for properties on Validator, but the RI doesn't
*/
public void setProperty( String name, Object value )
throws PropertyException {
throw new PropertyException(name, value);
}
/**
* There are no required properties, so simply throw an exception. Other
* providers may have support for properties on Validator, but the RI doesn't
*/
public Object getProperty( String name )
throws PropertyException {
if( name.equals( JAXB_RI_BUILD_ID ) ) {
return buildVersionId;
}
throw new PropertyException(name);
}
}