public static String buildSafeClassName(String className, XMLContext.Default defaults) { return buildSafeClassName( className, defaults.getPackageName() ); }
protected XMLContext getContext(InputStream is) throws Exception { XMLContext xmlContext = new XMLContext( BootstrapContextImpl.INSTANCE ); Document doc = new SAXReader().read( is ); xmlContext.addDocument( doc ); return xmlContext; } }
globalDefaults.setCatalog( unitElement != null ? unitElement.getTextTrim() : null ); unitElement = defaultElement.element( "access" ); setAccess( unitElement, globalDefaults ); unitElement = defaultElement.element( "cascade-persist" ); globalDefaults.setCascadePersist( unitElement != null ? Boolean.TRUE : null ); unitElement = defaultElement.element( "delimited-identifiers" ); globalDefaults.setDelimitedIdentifiers( unitElement != null ? Boolean.TRUE : null ); defaultEntityListeners.addAll( addEntityListenerClasses( defaultElement, null, addedClasses ) ); entityMappingDefault.setCatalog( unitElement != null ? unitElement.getTextTrim() : null ); unitElement = root.element( "access" ); setAccess( unitElement, entityMappingDefault ); defaultElements.add( root ); setLocalAttributeConverterDefinitions( root.elements( "converter" ) ); addClass( entities, packageName, entityMappingDefault, addedClasses ); addClass( entities, packageName, entityMappingDefault, addedClasses ); addClass( entities, packageName, entityMappingDefault, addedClasses ); return addedClasses;
private void addClass(List<Element> entities, String packageName, Default defaults, List<String> addedClasses) { for (Element element : entities) { String className = buildSafeClassName( element.attributeValue( "class" ), packageName ); if ( classOverriding.containsKey( className ) ) { //maybe switch it to warn? throw new IllegalStateException( "Duplicate XML entry for " + className ); } addedClasses.add( className ); classOverriding.put( className, element ); Default localDefault = new Default(); localDefault.override( defaults ); String metadataCompleteString = element.attributeValue( "metadata-complete" ); if ( metadataCompleteString != null ) { localDefault.setMetadataComplete( Boolean.parseBoolean( metadataCompleteString ) ); } String access = element.attributeValue( "access" ); setAccess( access, localDefault ); defaultsOverriding.put( className, localDefault ); LOG.debugf( "Adding XML overriding information for %s", className ); addEntityListenerClasses( element, packageName, addedClasses ); } }
if ( defaults == null ) { defaults = new HashMap<>(); XMLContext.Default xmlDefaults = xmlContext.getDefault( null ); defaults.put( "cascade-persist", xmlDefaults.getCascadePersist() ); List<Class> entityListeners = new ArrayList<Class>(); for ( String className : xmlContext.getDefaultEntityListeners() ) { try { entityListeners.add( classLoaderAccess.classForName( className ) ); for ( Element element : xmlContext.getAllDocuments() ) { @SuppressWarnings( "unchecked" ) List<Element> elements = element.elements( "sequence-generator" );
globalDefaults.setCatalog( unitElement != null ? unitElement.getTextTrim() : null ); unitElement = defaultElement.element( "access" ); setAccess( unitElement, globalDefaults ); unitElement = defaultElement.element( "cascade-persist" ); globalDefaults.setCascadePersist( unitElement != null ? Boolean.TRUE : null ); unitElement = defaultElement.element( "delimited-identifiers" ); globalDefaults.setDelimitedIdentifiers( unitElement != null ? Boolean.TRUE : null ); defaultEntityListeners.addAll( addEntityListenerClasses( defaultElement, null, addedClasses ) ); entityMappingDefault.setCatalog( unitElement != null ? unitElement.getTextTrim() : null ); unitElement = root.element( "access" ); setAccess( unitElement, entityMappingDefault ); defaultElements.add( root ); addClass( entities, packageName, entityMappingDefault, addedClasses ); addClass( entities, packageName, entityMappingDefault, addedClasses ); addClass( entities, packageName, entityMappingDefault, addedClasses ); return addedClasses;
private void initAnnotations() { if ( annotations == null ) { XMLContext.Default defaults = xmlContext.getDefault( className ); if ( className != null && propertyName == null ) { Element tree = xmlContext.getXMLTree( className ); Annotation[] annotations = getPhysicalAnnotations(); List<Annotation> annotationList = new ArrayList<>( annotations.length + 5 ); Element tree = xmlContext.getXMLTree( className ); Annotation[] annotations = getPhysicalAnnotations(); List<Annotation> annotationList = new ArrayList<>( annotations.length + 5 );
final List<String> classNames = jpaMetadataProvider.getXMLContext().addDocument( dom4jDocument ); for ( String className : classNames ) { xClasses.add( toXClass( className, reflectionManager ) ); jpaMetadataProvider.getXMLContext().applyDiscoveredAttributeConverters( attributeConverterManager );
private void setAccess(Element unitElement, Default defaultType) { if ( unitElement != null ) { String access = unitElement.getTextTrim(); setAccess( access, defaultType ); } }
@Override public AnnotationReader getAnnotationReader(AnnotatedElement annotatedElement) { AnnotationReader reader = cache.get( annotatedElement ); if (reader == null) { if ( xmlContext.hasContext() ) { reader = new JPAOverriddenAnnotationReader( annotatedElement, xmlContext, classLoaderAccess ); } else { reader = delegate.getAnnotationReader( annotatedElement ); } cache.put(annotatedElement, reader); } return reader; }
final MetadataProvider metadataProvider = ( ( MetadataProviderInjector ) reflectionManager ).getMetadataProvider(); JPAMetadataProvider jpaMetadataProvider = ( JPAMetadataProvider ) metadataProvider; List<String> classnames = jpaMetadataProvider.getXMLContext().addDocument( doc ); for ( String classname : classnames ) { try {
private void addClass(List<Element> entities, String packageName, Default defaults, List<String> addedClasses) { for (Element element : entities) { String className = buildSafeClassName( element.attributeValue( "class" ), packageName ); if ( classOverriding.containsKey( className ) ) { //maybe switch it to warn? throw new IllegalStateException( "Duplicate XML entry for " + className ); } addedClasses.add( className ); classOverriding.put( className, element ); Default localDefault = new Default(); localDefault.override( defaults ); String metadataCompleteString = element.attributeValue( "metadata-complete" ); if ( metadataCompleteString != null ) { localDefault.setMetadataComplete( Boolean.parseBoolean( metadataCompleteString ) ); } String access = element.attributeValue( "access" ); setAccess( access, localDefault ); defaultsOverriding.put( className, localDefault ); log.debug( "Adding XML overriding information for {}", className ); addEntityListenerClasses( element, packageName, addedClasses ); } }
public Map<Object, Object> getDefaults() { if ( defaults == null ) { defaults = new HashMap<Object, Object>(); XMLContext.Default xmlDefaults = xmlContext.getDefault( null ); for ( String className : xmlContext.getDefaultEntityListeners() ) { try { entityListeners.add( ReflectHelper.classForName( className, this.getClass() ) ); for ( Element element : xmlContext.getAllDocuments() ) { @SuppressWarnings( "unchecked" ) List<Element> elements = element.elements( "sequence-generator" );
globalDefaults.setCatalog( unitElement != null ? unitElement.getTextTrim() : null ); unitElement = defaultElement.element( "access" ); setAccess( unitElement, globalDefaults ); unitElement = defaultElement.element( "cascade-persist" ); globalDefaults.setCascadePersist( unitElement != null ? Boolean.TRUE : null ); unitElement = defaultElement.element( "delimited-identifiers" ); globalDefaults.setDelimitedIdentifiers( unitElement != null ? Boolean.TRUE : null ); defaultEntityListeners.addAll( addEntityListenerClasses( defaultElement, null, addedClasses ) ); entityMappingDefault.setCatalog( unitElement != null ? unitElement.getTextTrim() : null ); unitElement = root.element( "access" ); setAccess( unitElement, entityMappingDefault ); defaultElements.add( root ); addClass( entities, packageName, entityMappingDefault, addedClasses ); addClass( entities, packageName, entityMappingDefault, addedClasses ); addClass( entities, packageName, entityMappingDefault, addedClasses ); return addedClasses;
private void initAnnotations() { if ( annotations == null ) { XMLContext.Default defaults = xmlContext.getDefault( className ); if ( className != null && propertyName == null ) { Element tree = xmlContext.getXMLTree( className ); Annotation[] annotations = getJavaAnnotations(); List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 ); Element tree = xmlContext.getXMLTree( className ); Annotation[] annotations = getJavaAnnotations(); List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 );
final List<String> classNames = jpaMetadataProvider.getXMLContext().addDocument( dom4jDocument ); for ( String className : classNames ) { xClasses.add( toXClass( className, reflectionManager ) ); jpaMetadataProvider.getXMLContext().applyDiscoveredAttributeConverters( attributeConverterManager );
private void setAccess(Element unitElement, Default defaultType) { if ( unitElement != null ) { String access = unitElement.getTextTrim(); setAccess( access, defaultType ); } }
public AnnotationReader getAnnotationReader(AnnotatedElement annotatedElement) { AnnotationReader reader = cache.get( annotatedElement ); if (reader == null) { if ( xmlContext.hasContext() ) { reader = new JPAOverridenAnnotationReader( annotatedElement, xmlContext ); } else { reader = delegate.getAnnotationReader( annotatedElement ); } cache.put(annotatedElement, reader); } return reader; }
public void add(XmlDocument metadataXml) { if ( inSecondPass || !isOrmXml( metadataXml ) ) { metadataSourceQueue.add( metadataXml ); } else { final MetadataProvider metadataProvider = ( (MetadataProviderInjector) reflectionManager ).getMetadataProvider(); JPAMetadataProvider jpaMetadataProvider = ( JPAMetadataProvider ) metadataProvider; List<String> classNames = jpaMetadataProvider.getXMLContext().addDocument( metadataXml.getDocumentTree() ); for ( String className : classNames ) { try { metadataSourceQueue.add( reflectionManager.classForName( className, this.getClass() ) ); } catch ( ClassNotFoundException e ) { throw new AnnotationException( "Unable to load class defined in XML: " + className, e ); } } } }
private List<String> addEntityListenerClasses(Element element, String packageName, List<String> addedClasses) { List<String> localAddedClasses = new ArrayList<>(); Element listeners = element.element( "entity-listeners" ); if ( listeners != null ) { @SuppressWarnings( "unchecked" ) List<Element> elements = listeners.elements( "entity-listener" ); for (Element listener : elements) { String listenerClassName = buildSafeClassName( listener.attributeValue( "class" ), packageName ); if ( classOverriding.containsKey( listenerClassName ) ) { //maybe switch it to warn? if ( "entity-listener".equals( classOverriding.get( listenerClassName ).getName() ) ) { LOG.duplicateListener( listenerClassName ); continue; } throw new IllegalStateException("Duplicate XML entry for " + listenerClassName); } localAddedClasses.add( listenerClassName ); classOverriding.put( listenerClassName, listener ); } } LOG.debugf( "Adding XML overriding information for listeners: %s", localAddedClasses ); addedClasses.addAll( localAddedClasses ); return localAddedClasses; }