<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title></title><style type="text/css">.expressomail-body-blockquote {margin: 5px 10px 0 3px;padding-left: 10px;border-left: 2px solid #000088;} </style></head><body>Hi,<br><br>I get this error when the value of "UUID LDAP attribute" is the same of the&nbsp; "Username LDAP attribute": Ex. "uid"<br><br>Caused by: java.lang.NullPointerException<br>&nbsp;&nbsp;&nbsp; at org.keycloak.models.cache.DefaultCacheUserProvider.getUserByUsername(DefaultCacheUserProvider.java:149) [keycloak-invalidation-cache-model-1.3.1.Final.jar:1.3.1.Final]<br>&nbsp;&nbsp;&nbsp; at org.keycloak.federation.ldap.LDAPFederationProvider.importLDAPUsers(LDAPFederationProvider.java:391)<br><br>The method org.keycloak.federation.ldap.LDAPUtils.getUsername(LDAPObject, LDAPConfig)<br>dont return the username, because the attribute is not in the map.<br><br>This occours because the uid is not added into the map of attributes.<br><br>I looked at&nbsp; org.keycloak.federation.ldap.idm.store.ldap.LDAPIdentityStore.populateAttributedType(SearchResult, Collection&lt;String&gt;) line 402:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ldapAttributeName.equalsIgnoreCase(getConfig().getUuidLDAPAttributeName())) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object uuidValue = ldapAttribute.get();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ldapObject.setUuid(this.operationManager.decodeEntryUUID(uuidValue));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set&lt;String&gt; attrValues = new TreeSet&lt;&gt;();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NamingEnumeration&lt;?&gt; enumm = ldapAttribute.getAll();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (enumm.hasMoreElements()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String attrVal = enumm.next().toString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attrValues.add(attrVal);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } ...<br><br><br>
<DIV>
-<BR>
<BR>
<BR>
&quot;Esta mensagem do SERVI&Ccedil;O FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa p&uacute;blica federal regida pelo disposto na Lei Federal n&ordm; 5.615, &eacute; enviada exclusivamente a seu destinat&aacute;rio e pode conter informa&ccedil;&otilde;es confidenciais, protegidas por sigilo profissional. Sua utiliza&ccedil;&atilde;o desautorizada &eacute; ilegal e sujeita o infrator &agrave;s penas da lei. Se voc&ecirc; a recebeu indevidamente, queira, por gentileza, reenvi&aacute;-la ao emitente, esclarecendo o equ&iacute;voco.&quot;<BR>
<BR>
&quot;This message from SERVI&Ccedil;O FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules. Its unauthorized use is illegal and may subject the transgressor to the law&#39;s penalties. If you&#39;re not the addressee, please send it back, elucidating the failure.&quot;<BR>
</DIV></body></html>