1 package com.sun.tools.xjc.runtime; 2 3 import java.io.InputStream ; 4 import java.io.ObjectInputStream ; 5 import java.util.ArrayList ; 6 import java.util.Iterator ; 7 import java.util.List ; 8 import java.util.Map ; 9 10 import javax.xml.bind.JAXBException; 11 import javax.xml.namespace.QName ; 12 13 import com.sun.xml.bind.Messages; 14 15 23 public class GrammarInfoImpl implements GrammarInfo 24 { 25 29 private final Map rootTagMap; 30 31 34 private final Class objectFactoryClass; 35 36 41 private final Map defaultImplementationMap; 42 43 46 private final ClassLoader classLoader; 47 48 public GrammarInfoImpl( Map _rootTagMap, Map _defaultImplementationMap, Class _objectFactoryClass ) { 49 this.rootTagMap = _rootTagMap; 50 this.defaultImplementationMap = _defaultImplementationMap; 51 this.objectFactoryClass = _objectFactoryClass; 52 this.classLoader = objectFactoryClass.getClassLoader(); 55 } 56 57 62 private final Class lookupRootMap( String nsUri, String localName ) { 63 QName qn; 65 66 qn = new QName (nsUri,localName); 67 if(rootTagMap.containsKey(qn)) return (Class )rootTagMap.get(qn); 68 69 qn = new QName (nsUri,"*"); 70 if(rootTagMap.containsKey(qn)) return (Class )rootTagMap.get(qn); 71 72 qn = new QName ("*","*"); 73 return (Class )rootTagMap.get(qn); 74 } 75 76 public final Class getRootElement(String namespaceUri, String localName) { 77 Class intfCls = lookupRootMap(namespaceUri,localName); 78 if(intfCls==null) return null; 79 else return getDefaultImplementation(intfCls); 80 } 81 82 public final UnmarshallingEventHandler createUnmarshaller( 83 String namespaceUri, String localName, UnmarshallingContext context ) { 84 85 Class impl = getRootElement(namespaceUri,localName); 86 if(impl==null) return null; 87 88 try { 89 return ((UnmarshallableObject)impl.newInstance()).createUnmarshaller(context); 90 } catch (InstantiationException e) { 91 throw new InstantiationError (e.toString()); 92 } catch (IllegalAccessException e) { 93 throw new IllegalAccessError (e.toString()); 94 } 95 } 96 97 public final String [] getProbePoints() { 98 List r = new ArrayList (); 99 for (Iterator itr = rootTagMap.keySet().iterator(); itr.hasNext();) { 100 QName qn = (QName ) itr.next(); 101 r.add(qn.getNamespaceURI()); 102 r.add(qn.getLocalPart()); 103 } 104 return (String []) r.toArray(new String [r.size()]); 105 } 106 107 public final boolean recognize( String nsUri, String localName ) { 108 return lookupRootMap(nsUri,localName)!=null; 109 } 110 112 public final Class getDefaultImplementation( Class javaContentInterface ) { 113 try { 114 return Class.forName((String )defaultImplementationMap.get(javaContentInterface), true, classLoader ); 116 } catch (ClassNotFoundException e) { 117 throw new NoClassDefFoundError (e.toString()); 118 } 119 } 120 121 126 public final com.sun.msv.grammar.Grammar getGrammar() throws JAXBException { 127 try { 128 InputStream is = objectFactoryClass.getResourceAsStream("bgm.ser"); 129 130 if( is==null ) { 131 String name = objectFactoryClass.getName(); 133 int idx = name.lastIndexOf('.'); 134 name = '/'+name.substring(0,idx+1).replace('.','/')+"bgm.ser"; 135 throw new JAXBException( 136 Messages.format( Messages.NO_BGM, name ) ); 137 } 138 139 ObjectInputStream ois = new ObjectInputStream ( is ); 141 com.sun.xml.bind.GrammarImpl g = (com.sun.xml.bind.GrammarImpl)ois.readObject(); 142 ois.close(); 143 144 g.connect(new com.sun.msv.grammar.Grammar[]{g}); 146 return g; 147 } catch( Exception e ) { 148 throw new JAXBException( 149 Messages.format( Messages.UNABLE_TO_READ_BGM ), 150 e ); 151 } 152 } 153 155 159 public XMLSerializable castToXMLSerializable(Object o) { 160 if( o instanceof XMLSerializable ) { 161 return (XMLSerializable)o; 162 } else { 163 return null; 164 } 165 } 166 168 172 public ValidatableObject castToValidatableObject(Object o) { 173 if( o instanceof ValidatableObject ) { 174 return (ValidatableObject)o; 175 } else { 176 return null; 177 } 178 } 179 } 181 | Popular Tags |