DIRAPI-341 respecting strict/relaxed settings from SchemaLoader
Signed-off-by: Ghenadii Batalski <Ghenadii.Batalski@gmail.com>
diff --git a/.gitignore b/.gitignore
index d3c4e64..da87ed5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,5 @@
bin
dependency-reduced-pom.xml
META-INF
-
+# intellij idea folder
+.idea
diff --git a/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java b/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
index 05d5bc5..8b90d44 100644
--- a/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
+++ b/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
@@ -957,6 +957,7 @@
ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED( "ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED" ),
ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA( "ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA" ),
ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED( "ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED" ),
+ ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED("ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED"),
// api-utils 17000 - 17999
ERR_17000_UNEXPECTED_PARSER_CONDITION( "ERR_17000_UNEXPECTED_PARSER_CONDITION" ),
diff --git a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
index 8802ed1..24bf20f 100644
--- a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
+++ b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
@@ -950,6 +950,7 @@
ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED=SchemaManager can't be loaded: {0}
ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA=Cannot load the unknown schema {0}
ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED=the SchemaObject {0} cannot be added, it''s not a valid LoadableSchemaObject.
+ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED=Default SchemaLoader cannot be created {0}
# api-utils 17000 - 17999
ERR_17000_UNEXPECTED_PARSER_CONDITION=Unexpected parser condition throwing IllegalStateException.
diff --git a/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java b/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
index bf9ef43..42f7633 100644
--- a/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
+++ b/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
@@ -129,31 +129,36 @@
private SchemaErrorHandler errorHandler;
/**
- * Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
+ * Creates a new instance of DefaultSchemaManager with LDIF based SchemaLoader,
+ * Strict schema validation
*/
public DefaultSchemaManager()
{
- // Default to the the root (one schemaManager for all the entries
- namingContext = Dn.ROOT_DSE;
- registries = new Registries();
- factory = new SchemaEntityFactory();
- isRelaxed = STRICT;
- setErrorHandler( new LoggingSchemaErrorHandler() );
-
+ this( STRICT, jarLdifSchemaLoader().getAllSchemas() );
try
{
- SchemaLoader schemaLoader = new JarLdifSchemaLoader();
-
- for ( Schema schema : schemaLoader.getAllSchemas() )
- {
- schemaMap.put( schema.getSchemaName(), schema );
- }
-
loadAllEnabled();
}
+ catch ( LdapException e )
+ {
+ LOG.error( I18n.err( I18n.ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED, e.getMessage() ) );
+ throw new RuntimeException( e.getMessage() );
+ }
+ }
+
+ /*
+ Static helper factory Create LDIF based SchemaLoader
+ needed to handle checked exceptions
+ */
+ private static SchemaLoader jarLdifSchemaLoader()
+ {
+ try
+ {
+ return new JarLdifSchemaLoader();
+ }
catch ( LdapException | IOException e )
{
- LOG.error( I18n.err( I18n.ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED, e.getMessage() ) );
+ LOG.error( I18n.err( I18n.ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED, e.getMessage() ) );
throw new RuntimeException( e.getMessage() );
}
}
@@ -161,45 +166,26 @@
/**
* Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
+ * Strict schema validation
*
* @param schemas The list of schema to load
*/
public DefaultSchemaManager( Collection<Schema> schemas )
{
- // Default to the the root (one schemaManager for all the entries
- namingContext = Dn.ROOT_DSE;
-
- for ( Schema schema : schemas )
- {
- schemaMap.put( schema.getSchemaName(), schema );
- }
-
- registries = new Registries();
- factory = new SchemaEntityFactory();
- isRelaxed = STRICT;
- setErrorHandler( new LoggingSchemaErrorHandler() );
+ this( STRICT, schemas );
}
/**
- * Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
- *
+ * Creates a new instance of DefaultSchemaManager with the given schemaLoader
+ *
+ * Schema validation strictness (i.e. relaxed/strict) controlled by the given schemaLoader
+ *
* @param schemaLoader The schemaLoader containing the schemas to load
*/
public DefaultSchemaManager( SchemaLoader schemaLoader )
{
- // Default to the the root (one schemaManager for all the entries
- namingContext = Dn.ROOT_DSE;
-
- for ( Schema schema : schemaLoader.getAllSchemas() )
- {
- schemaMap.put( schema.getSchemaName(), schema );
- }
-
- registries = new Registries();
- factory = new SchemaEntityFactory();
- isRelaxed = STRICT;
- setErrorHandler( new LoggingSchemaErrorHandler() );
+ this( schemaLoader.isRelaxed(), schemaLoader.getAllSchemas() );
}