@@ -10,10 +10,12 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.persistence.AttributeConverter;
+import org.hibernate.annotations.common.reflection.MetadataProviderInjector;
import org.hibernate.boot.MappingException;
import org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory;
import org.hibernate.boot.archive.internal.UrlInputStreamAccess;
@@ -29,11 +31,14 @@
import org.hibernate.boot.internal.ClassLoaderAccessImpl;
import org.hibernate.boot.jaxb.Origin;
import org.hibernate.boot.jaxb.SourceType;
+import org.hibernate.boot.jaxb.spi.Binding;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.spi.ClassLoaderAccess;
import org.hibernate.boot.spi.MetadataBuildingOptions;
import org.hibernate.boot.spi.XmlMappingBinderAccess;
import org.hibernate.cfg.AttributeConverterDefinition;
+import org.hibernate.cfg.annotations.reflection.JPAMetadataProvider;
+import org.hibernate.cfg.annotations.reflection.XMLContext;
import org.hibernate.service.ServiceRegistry;
import org.jboss.logging.Logger;
@@ -202,8 +207,11 @@
nonLocatedMappingFileNames.addAll( explicitMappingFileNames );
}
+ final List<org.dom4j.Document> dom4jDocuments = new LinkedList<>();
for ( MappingFileDescriptor mappingFileDescriptor : scanResult.getLocatedMappingFiles() ) {
- managedResources.addXmlBinding( xmlMappingBinderAccess.bind( mappingFileDescriptor.getStreamAccess() ) );
+ Binding<org.dom4j.Document> binding = xmlMappingBinderAccess.bind( mappingFileDescriptor.getStreamAccess() );
+ dom4jDocuments.add( binding.getRoot() );
+ managedResources.addXmlBinding( binding );
nonLocatedMappingFileNames.remove( mappingFileDescriptor.getName() );
}
@@ -216,7 +224,23 @@
);
}
final UrlInputStreamAccess inputStreamAccess = new UrlInputStreamAccess( url );
- managedResources.addXmlBinding( xmlMappingBinderAccess.bind( inputStreamAccess ) );
+ Binding<org.dom4j.Document> binding = xmlMappingBinderAccess.bind( inputStreamAccess );
+ dom4jDocuments.add( binding.getRoot() );
+ managedResources.addXmlBinding( binding );
+ }
+
+ if ( !dom4jDocuments.isEmpty() ) {
+ + +
+ final JPAMetadataProvider jpaMetadataProvider = (JPAMetadataProvider) ( (MetadataProviderInjector) options.getReflectionManager() ).getMetadataProvider();
+ XMLContext xmlContext = jpaMetadataProvider.getXMLContext();
+ for ( org.dom4j.Document dom4jDocument : dom4jDocuments ) {
+ final List<String> classNames = xmlContext.addDocument( dom4jDocument );
+ for ( String className : classNames ) {
+ managedResources.addAnnotatedClassName( className );
+ }
+ }
}