okay Thanks @thomasdarimont .
I have implemented a custom idp class extending AbstractIdentityProviderMapper, i hope that’s correct .
But now i am getting below error while building and i am using keycloak 17 :
kc.bat build
Updating the configuration and installing your custom providers, if any. Please wait.
2022-12-19 17:06:19,976 WARN [org.keycloak.services] (build-1) KC-SERVICES0047: null (com.keycloakSPI.storage.provider.CustomIdentityProviderMapper) is implementing the internal SPI identity-provider-mapper. This SPI is internal and may change without notice
2022-12-19 17:06:20,512 INFO [com.keycloakSPI.storage.provider.CustomUserStorageProviderFactory] (build-1) [I24] CustomUserStorageProviderFactory created
2022-12-19 17:06:20,531 INFO [com.keycloakSPI.storage.provider.CustomUserStorageProviderFactory] (build-1) [I69] getId()
2022-12-19 17:06:20,532 INFO [com.keycloakSPI.storage.provider.CustomUserStorageProviderFactory] (build-1) [I69] getId()
2022-12-19 17:06:20,532 INFO [com.keycloakSPI.storage.provider.CustomUserStorageProviderFactory] (build-1) [I69] getId()
2022-12-19 17:06:20,756 INFO [com.keycloakSPI.storage.provider.CustomUserStorageProviderFactory] (build-1) [I69] getId()
ERROR: Failed to run 'build' command.
ERROR: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.deployment.steps.MainClassBuildStep#build threw an exception: java.lang.RuntimeException: Failed to record call to method public void org.keycloak.quarkus.runtime.KeycloakRecorder.configSessionFactory(java.util.Map,java.util.Map,java.util.Map,java.lang.Boolean)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.writeBytecode(BytecodeRecorderImpl.java:509)
at io.quarkus.deployment.steps.MainClassBuildStep.writeRecordedBytecode(MainClassBuildStep.java:444)
at io.quarkus.deployment.steps.MainClassBuildStep.build(MainClassBuildStep.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:882)
at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
at java.base/java.lang.Thread.run(Thread.java:835)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.NullPointerException
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadComplexObject(BytecodeRecorderImpl.java:1117)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstanceImpl(BytecodeRecorderImpl.java:938)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstance(BytecodeRecorderImpl.java:610)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadComplexObject(BytecodeRecorderImpl.java:1119)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstanceImpl(BytecodeRecorderImpl.java:938)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstance(BytecodeRecorderImpl.java:610)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadComplexObject(BytecodeRecorderImpl.java:1119)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstanceImpl(BytecodeRecorderImpl.java:938)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstance(BytecodeRecorderImpl.java:610)
at io.quarkus.deployment.recording.BytecodeRecorderImpl.writeBytecode(BytecodeRecorderImpl.java:504)
... 13 more
and the custom class is as below :
public class CustomIdentityProviderMapper extends AbstractIdentityProviderMapper {
private Logger log = LoggerFactory.getLogger(CustomIdentityProviderMapper.class);
private KeycloakSession session;
private IdentityProviderModel identityProviderModel;
public CustomIdentityProviderMapper(KeycloakSession session, IdentityProviderModel identityProviderModel){
this.session = session;
this.identityProviderModel = identityProviderModel;
}
public CustomIdentityProviderMapper(){}
public CustomIdentityProviderMapper(KeycloakSession session){
this.session = session;
}
@Override
public IdentityProviderMapper create(KeycloakSession session) {
return new CustomIdentityProviderMapper(session) ;
}
@Override
public void close() {
}
@Override
public String getId() {
return null;
}
@Override
public void init(org.keycloak.Config.Scope config) {
}
@Override
public void postInit(KeycloakSessionFactory factory) {
}
@Override
public String[] getCompatibleProviders() {
return new String[0];
}
@Override
public String getDisplayCategory() {
return null;
}
@Override
public String getDisplayType() {
return null;
}
@Override
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
log.info("CALLED BEFORE FIRST BROKER LOGIN**********************");
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
log.info("CALLED AFTER FIRST BROKER LOGIN**********************");
}
@Override
public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
}
@Override
public void updateBrokeredUserLegacy(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
updateBrokeredUser(session, realm, user, mapperModel, context);
}
@Override
public String getHelpText() {
return null;
}
@Override
public List<ProviderConfigProperty> getConfigProperties() {
return null;
}
}
Could you please check what correction it needs .
Thanks !!