1
2
3
4
5
6
7
8 package net.sf.jour.rt.view.config.impl.runtime;
9
10 import javax.xml.bind.DatatypeConverter;
11 import javax.xml.bind.JAXBContext;
12 import javax.xml.bind.JAXBException;
13 import javax.xml.bind.Marshaller;
14 import javax.xml.bind.PropertyException;
15 import javax.xml.bind.Unmarshaller;
16 import javax.xml.bind.Validator;
17
18 import com.sun.xml.bind.Messages;
19 import com.sun.xml.bind.DatatypeConverterImpl;
20
21 /***
22 * This class provides the default implementation of JAXBContext. It
23 * also creates the GrammarInfoFacade that unifies all of the grammar
24 * info from packages on the contextPath.
25 *
26 * @version $Revision: 1.10.4.1 $
27 */
28 public class DefaultJAXBContextImpl extends JAXBContext {
29
30 /***
31 * This object keeps information about the grammar.
32 *
33 * When more than one package are specified,
34 * GrammarInfoFacade is used.
35 */
36 private GrammarInfo gi = null;
37
38 /***
39 * This is the constructor used by javax.xml.bind.FactoryFinder which
40 * bootstraps the RI. It causes the construction of a JAXBContext that
41 * contains a GrammarInfoFacade which is the union of all the generated
42 * JAXBContextImpl objects on the contextPath.
43 */
44 public DefaultJAXBContextImpl( String contextPath, ClassLoader classLoader )
45 throws JAXBException {
46
47 this( GrammarInfoFacade.createGrammarInfoFacade( contextPath, classLoader ) );
48
49
50 DatatypeConverter.setDatatypeConverter(DatatypeConverterImpl.theInstance);
51 }
52
53 /***
54 * This constructor is used by the default no-arg constructor in the
55 * generated JAXBContextImpl objects. It is also used by the
56 * bootstrapping constructor in this class.
57 */
58 public DefaultJAXBContextImpl( GrammarInfo gi ) {
59 this.gi = gi;
60 }
61
62 public GrammarInfo getGrammarInfo() {
63 return gi;
64 }
65
66
67
68 /***
69 * Once we load a grammar, we will cache the value here.
70 */
71 private com.sun.msv.grammar.Grammar grammar = null;
72
73 /***
74 * Loads a grammar object for the unmarshal-time validation.
75 */
76 public com.sun.msv.grammar.Grammar getGrammar() throws JAXBException {
77 if( grammar==null )
78
79
80
81
82
83 grammar = gi.getGrammar();
84 return grammar;
85 }
86
87
88 /***
89 * Create a <CODE>Marshaller</CODE> object that can be used to convert a
90 * java content-tree into XML data.
91 *
92 * @return a <CODE>Marshaller</CODE> object
93 * @throws JAXBException if an error was encountered while creating the
94 * <code>Marshaller</code> object
95 */
96 public Marshaller createMarshaller() throws JAXBException {
97 return new MarshallerImpl( this );
98 }
99
100 /***
101 * Create an <CODE>Unmarshaller</CODE> object that can be used to convert XML
102 * data into a java content-tree.
103 *
104 * @return an <CODE>Unmarshaller</CODE> object
105 * @throws JAXBException if an error was encountered while creating the
106 * <code>Unmarshaller</code> object
107 */
108 public Unmarshaller createUnmarshaller() throws JAXBException {
109 return new UnmarshallerImpl( this, gi );
110 }
111
112 /***
113 * Create a <CODE>Validator</CODE> object that can be used to validate a
114 * java content-tree.
115 *
116 * @return an <CODE>Unmarshaller</CODE> object
117 * @throws JAXBException if an error was encountered while creating the
118 * <code>Validator</code> object
119 */
120 public Validator createValidator() throws JAXBException {
121 return new ValidatorImpl( this );
122 }
123
124
125
126 /***
127 * Create an instance of the specified Java content interface.
128 *
129 * @param javaContentInterface the Class object
130 * @return an instance of the Java content interface
131 * @exception JAXBException
132 */
133 public Object newInstance( Class javaContentInterface )
134 throws JAXBException {
135
136 if( javaContentInterface == null ) {
137 throw new JAXBException( Messages.format( Messages.CI_NOT_NULL ) );
138 }
139
140 try {
141 Class c = gi.getDefaultImplementation( javaContentInterface );
142 if(c==null)
143 throw new JAXBException(
144 Messages.format( Messages.MISSING_INTERFACE, javaContentInterface ));
145
146 return c.newInstance();
147 } catch( Exception e ) {
148 throw new JAXBException( e );
149 }
150 }
151
152 /***
153 * There are no required properties, so simply throw an exception. Other
154 * providers may have support for properties on Validator, but the RI doesn't
155 */
156 public void setProperty( String name, Object value )
157 throws PropertyException {
158
159 throw new PropertyException(name, value);
160 }
161
162 /***
163 * There are no required properties, so simply throw an exception. Other
164 * providers may have support for properties on Validator, but the RI doesn't
165 */
166 public Object getProperty( String name )
167 throws PropertyException {
168
169 throw new PropertyException(name);
170 }
171
172
173 }