[
https://issues.apache.org/jira/browse/DIRSERVER-1300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12668397#action_12668397
]
Aleksander Adamowski commented on DIRSERVER-1300:
-------------------------------------------------
I think the patch didn't apply correctly because the old unconditional add is
still there
for ( LdifEntry entry : entries )
{
HERE--> service.getAdminSession().add(
new DefaultServerEntry( service.getRegistries(),
entry.getEntry() ) );
if ( entry.isChangeAdd() )
{
service.getAdminSession().add(
new DefaultServerEntry( service.getRegistries(),
entry.getEntry() ) );
}
else if ( entry.isChangeModify() )
{
service.getAdminSession().modify(
entry.getDn(), entry.getModificationItems() );
}
else
{
String message = "Unsupported changetype found in LDIF: " +
entry.getChangeType();
LOG.error( message );
throw new NamingException( message );
}
}
I think it will throw the Exception before getting to the conditional check.
These two lines should be deleted, there's already an add() invocation after
entry.isChangeAdd() gets checked. If you try to add() unconditionally, you'll
get an exception if the change isn't actually an add.
> Only adding from LDIF is possible with injectEntries() in IntegrationUtils
> --------------------------------------------------------------------------
>
> Key: DIRSERVER-1300
> URL: https://issues.apache.org/jira/browse/DIRSERVER-1300
> Project: Directory ApacheDS
> Issue Type: Bug
> Components: core-integ
> Affects Versions: 1.5.4
> Reporter: Aleksander Adamowski
> Fix For: 1.5.5
>
> Attachments:
> apacheds-core-integ_inject_ldif-changetype_modify_support.patch
>
>
> The method
> org.apache.directory.server.core.integ.IntegrationUtils.injectEntries(DirectoryService,
> String) only supports adding entries - it assumes that there are no
> changetype: something-other-than-add entries in the LDIF. This greatly
> complicates modifying the intergration testing server's schema.
> So the following LDIF cannot be currently processed by injectEntries:
> version: 1
> dn: cn=schema
> changetype: modify
> add: attributeTypes
> attributeTypes: ( 1.3.6.1.4.1.12345.1.1 NAME 'customAttr1'
> DESC 'custom attribute 1'
> EQUALITY caseIgnoreMatch
> SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
> SINGLE-VALUE )
> attributeTypes: ( 1.3.6.1.4.1.12345.1.2 NAME 'customAttr2'
> DESC 'custom attribute 2'
> EQUALITY caseIgnoreMatch
> SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
> SINGLE-VALUE )
> -
> add: objectClasses
> objectClasses: ( .3.6.1.4.1.12345.2.1
> NAME 'customClass1'
> SUP top
> STRUCTURAL
> MUST ( cn $ customAttr1 )
> MAY ( customAttr2 ) )
> I've tracked down the problem and found out it's quite simple to add support
> for the remaining change types:
> Index:
> src/main/java/org/apache/directory/server/core/integ/IntegrationUtils.java
> ===================================================================
> ---
> src/main/java/org/apache/directory/server/core/integ/IntegrationUtils.java
> (revision 731909)
> +++
> src/main/java/org/apache/directory/server/core/integ/IntegrationUtils.java
> (working copy)
> @@ -99,8 +99,19 @@
>
> for ( LdifEntry entry : entries )
> {
> - service.getAdminSession().add(
> - new DefaultServerEntry( service.getRegistries(),
> entry.getEntry() ) );
> + if ( entry.isChangeAdd() )
> + {
> + service.getAdminSession().add( new DefaultServerEntry(
> service.getRegistries(), entry.getEntry() ) );
> +
> + }
> + else if ( entry.isChangeModify() )
> + {
> + service.getAdminSession().modify( entry.getDn(),
> entry.getModificationItems() );
> + }
> + else
> + {
> + throw new NamingException( "Unsupported changetype found in
> LDIF: " + entry.getChangeType() );
> + }
> }
> }
>
> I'll attach the patch in a minute.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.