diff --git a/odm/src/main/java/org/springframework/ldap/odm/core/impl/OdmManagerImpl.java b/odm/src/main/java/org/springframework/ldap/odm/core/impl/OdmManagerImpl.java index 59c38af8..3cc75ec4 100755 --- a/odm/src/main/java/org/springframework/ldap/odm/core/impl/OdmManagerImpl.java +++ b/odm/src/main/java/org/springframework/ldap/odm/core/impl/OdmManagerImpl.java @@ -1,21 +1,5 @@ package org.springframework.ldap.odm.core.impl; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.naming.Name; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.SearchControls; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ldap.core.ContextSource; @@ -31,6 +15,21 @@ import org.springframework.ldap.odm.core.OdmException; import org.springframework.ldap.odm.core.OdmManager; import org.springframework.ldap.odm.typeconversion.ConverterManager; +import javax.naming.Name; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.SearchControls; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * An implementation of {@link org.springframework.ldap.odm.core.OdmManager} which * uses {@link org.springframework.ldap.odm.typeconversion.ConverterManager} to @@ -189,9 +188,9 @@ public final class OdmManagerImpl implements OdmManager { LOG.debug(String.format("Updating entry - %s$1", entry)); } - DirContextAdapter context = new DirContextAdapter(getId(entry)); + DirContextOperations context = ldapTemplate.lookupContext(getId(entry)); mapToContext(entry, context); - ldapTemplate.rebind(context); + ldapTemplate.modifyAttributes(context); } /* diff --git a/odm/src/test/java/org/springframework/ldap/odm/test/OrganizationalUnit.java b/odm/src/test/java/org/springframework/ldap/odm/test/OrganizationalUnit.java index 200ee73f..ea0d5428 100755 --- a/odm/src/test/java/org/springframework/ldap/odm/test/OrganizationalUnit.java +++ b/odm/src/test/java/org/springframework/ldap/odm/test/OrganizationalUnit.java @@ -1,21 +1,20 @@ package org.springframework.ldap.odm.test; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; - -import javax.naming.Name; - import org.springframework.ldap.odm.annotations.Attribute; import org.springframework.ldap.odm.annotations.Entry; import org.springframework.ldap.odm.annotations.Id; +import javax.naming.Name; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; + /** * Automatically generated to represent the LDAP object classes * "organizationalunit", "top". */ -@Entry(objectClasses = { "organizationalunit", "top" }) +@Entry(objectClasses = { "organizationalUnit", "top" }) public final class OrganizationalUnit { @Id @@ -74,6 +73,10 @@ public final class OrganizationalUnit { return street; } + public void setStreet(String street) { + this.street = street; + } + public String getDescription() { return description; } diff --git a/odm/src/test/java/org/springframework/ldap/odm/test/Person.java b/odm/src/test/java/org/springframework/ldap/odm/test/Person.java index ab56de9b..d11b4494 100755 --- a/odm/src/test/java/org/springframework/ldap/odm/test/Person.java +++ b/odm/src/test/java/org/springframework/ldap/odm/test/Person.java @@ -1,20 +1,19 @@ package org.springframework.ldap.odm.test; +import org.springframework.ldap.odm.annotations.Attribute; +import org.springframework.ldap.odm.annotations.Attribute.Type; +import org.springframework.ldap.odm.annotations.Entry; +import org.springframework.ldap.odm.annotations.Id; +import org.springframework.ldap.odm.annotations.Transient; + +import javax.naming.Name; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import javax.naming.Name; - -import org.springframework.ldap.odm.annotations.Attribute; -import org.springframework.ldap.odm.annotations.Entry; -import org.springframework.ldap.odm.annotations.Id; -import org.springframework.ldap.odm.annotations.Transient; -import org.springframework.ldap.odm.annotations.Attribute.Type; - // Simple LDAP entry for testing -@Entry(objectClasses = { "inetorgperson", "organizationalperson", "person", "top" }) +@Entry(objectClasses = { "inetOrgPerson", "organizationalPerson", "person", "top" }) public final class Person { public Person() { } diff --git a/odm/src/test/java/org/springframework/ldap/odm/test/TestLdap.java b/odm/src/test/java/org/springframework/ldap/odm/test/TestLdap.java index 66b2c4f5..dfd84491 100755 --- a/odm/src/test/java/org/springframework/ldap/odm/test/TestLdap.java +++ b/odm/src/test/java/org/springframework/ldap/odm/test/TestLdap.java @@ -1,18 +1,5 @@ package org.springframework.ldap.odm.test; -import static org.junit.Assert.assertEquals; - -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.naming.Name; -import javax.naming.directory.SearchControls; - import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; @@ -50,6 +37,18 @@ import org.springframework.ldap.odm.typeconversion.impl.converters.FromStringCon import org.springframework.ldap.odm.typeconversion.impl.converters.ToStringConverter; import org.springframework.ldap.test.LdapTestUtils; +import javax.naming.Name; +import javax.naming.directory.SearchControls; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.assertEquals; + // Tests all OdmManager functions public final class TestLdap { private static final Log LOG = LogFactory.getLog(TestLdap.class); @@ -520,6 +519,16 @@ public final class TestLdap { ((OdmManagerImpl)odmManager).read(Integer.class, baseName); } + @Test + public void updateWithChildren_Ldap235() throws Exception { + OrganizationalUnit organizationalUnit = odmManager.read(OrganizationalUnit.class, ouTestData[0].getDn()); + organizationalUnit.setStreet("new street"); + odmManager.update(organizationalUnit); + + OrganizationalUnit updated = odmManager.read(OrganizationalUnit.class, organizationalUnit.getDn()); + assertEquals(organizationalUnit, updated); + } + private enum Flag { URL("l", "url"), USERNAME("u", "username"),