<div dir="ltr"><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">Hi guys<br></div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">I&#39;m trying to use the picketlink on top of LDAP server using the following configuration:</div><br>public void observeIdentityConfigurationEvent(@Observes IdentityConfigurationEvent event){<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​    ​</div>IdentityConfigurationBuilder builder = event.getConfig();<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​    ​</div>builder.named(&quot;default&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​    ​</div>.stores()<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​    ​    ​</div>.ldap()<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.baseDN(&quot;dc=moghaddam,dc=com&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.bindDN(&quot;cn=Directory Manager&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.bindCredential(&quot;111&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.url(&quot;ldap://localhost:389&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.supportCredentials(true)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.mapping(User.class)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.baseDN(&quot;ou=Users,dc=moghaddam,dc=com&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.objectClasses(&quot;inetOrgPerson&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;firstName&quot;, &quot;givenName&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;lastName&quot;, &quot;sn&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;email&quot;, &quot;mail&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;loginName&quot;, &quot;cn&quot;, true)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;employeeNumber&quot;, &quot;employeeNumber&quot;)<br><span style="font-family:&#39;trebuchet ms&#39;,sans-serif">​    <div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​</div></span><span style="font-family:&#39;trebuchet ms&#39;,sans-serif">​    <div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​</div></span><span style="font-family:&#39;trebuchet ms&#39;,sans-serif">​    </span><span style="font-family:&#39;trebuchet ms&#39;,sans-serif"><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​</div></span><span style="font-family:&#39;trebuchet ms&#39;,sans-serif"><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​</div></span>.mapping(Group.class)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.hierarchySearchDepth(4)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.baseDN(&quot;ou=Groups,dc=moghaddam,dc=com&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.objectClasses(&quot;gamGroup&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;name&quot;, &quot;name&quot;, true)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.parentMembershipAttributeName(&quot;member&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​</div>.mapping(GroupMembership.class)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.forMapping(Group.class)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​    ​    ​    ​</div>.attribute(&quot;member&quot;, &quot;member&quot;)<br><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​​    ​</div>.build();<br>}<div><br></div><div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">What I want to do is to create a new Group as a child of a parent Group object:</div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small"><br></div><p class="MsoNormal"></p><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​</div>Group
<div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​parentGroup</div> = BasicModel.getGroup(identityManager, &quot;/Group 1&quot;);<p></p><p class="MsoNormal"></p>

<div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;display:inline">​</div>Group group = new Group(<div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​&quot;Child Group&quot;</div>, <div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small;display:inline">​</div><span style="font-family:&#39;trebuchet ms&#39;,sans-serif">parentGroup</span>);</div><div><br>identityManager.add(group);</div><div><br></div><div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">​If the &quot;/Group 1&quot; has at least one &quot;member​&quot; in LDAP, everything works fine. But if it has no members at all, when PicketLink&#39;s <b><a href="http://LDAPIdentityStore.">LDAPIdentityStore.</a></b><b><a href="https://github.com/picketlink/picketlink/blob/master/modules/idm/impl/src/main/java/org/picketlink/idm/ldap/internal/LDAPIdentityStore.java#L1008">addToParentAsMember</a> </b>tries to load it from LDAP server, there would be no <b>Attribute </b>object named &quot;member&quot; in its attributes list. So when it tries to call the <b>add </b>method of the retrieved attribute, a NullPointerException would be thrown.</div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">I&#39;m not sure this is intentional (that means a group should always have at least a member) or is just a bug. So decided to ask it here first and didn&#39;t created an issue in JIRA yet. If it&#39;s a bug, there should be a checking against null before adding the new child and if the member attribute is null, we have to first add &quot;member&quot; attribute to the parent object and then try to add the new child to it.</div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">Regards</div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small">Ehsan</div><div class="gmail_default" style="font-family:&#39;trebuchet ms&#39;,sans-serif;font-size:small"><br></div><br></div></div>