{"record":{"id":"b5d5301c11a68a7f","repo":"pentaho/pentaho-kettle","slug":"authenticationmanager-consumedtypeerror","errorCode":null,"errorMessage":"AuthenticationManager.ConsumedTypeError","messagePattern":"AuthenticationManager\\.ConsumedTypeError","errorType":"exception","errorClass":"AuthenticationFactoryException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/core/auth/core/AuthenticationManager.java","lineNumber":52,"sourceCode":"  private final List<AuthenticationProvider> authenticationProviders = new ArrayList<AuthenticationProvider>();\n\n  public void registerAuthenticationProvider( AuthenticationProvider authenticationProvider ) {\n    synchronized ( authenticationProviders ) {\n      authenticationProviders.add( authenticationProvider );\n    }\n  }\n\n  public boolean unregisterAuthenticationProvider( AuthenticationProvider authenticationProvider ) {\n    synchronized ( authenticationProviders ) {\n      return authenticationProviders.remove( authenticationProvider );\n    }\n  }\n\n  public <ReturnType, CreateArgType, ConsumedType> void registerConsumerFactory(\n      AuthenticationConsumerFactory<ReturnType, CreateArgType, ConsumedType> factory ) throws AuthenticationFactoryException {\n    if ( !factory.getConsumedType().isInterface()\n        && !AuthenticationProvider.class.isAssignableFrom( factory.getConsumedType() ) ) {\n      throw new AuthenticationFactoryException( BaseMessages.getString( PKG, \"AuthenticationManager.ConsumedTypeError\",\n          factory ) );\n    }\n\n    Map<Class<?>, AuthenticationConsumerFactory<?, ?, ?>> createTypeMap =\n        getRelevantConsumerFactoryMap( factory.getReturnType(), factory.getCreateArgType() );\n    synchronized ( createTypeMap ) {\n      createTypeMap.put( factory.getConsumedType(), factory );\n    }\n  }\n\n  public <ReturnType, ConsumedType> void registerConsumerClass(\n      Class<? extends AuthenticationConsumer<? extends ReturnType, ? extends ConsumedType>> consumerClass ) throws AuthenticationFactoryException {\n    registerConsumerFactory( new DefaultAuthenticationConsumerFactory( consumerClass ) );\n  }\n\n  public <ReturnType, CreateArgType, ConsumedType> List<AuthenticationPerformer<ReturnType, CreateArgType>>\n    getSupportedAuthenticationPerformers( Class<ReturnType> returnType, Class<CreateArgType> createArgType ) {\n    Map<Class<?>, AuthenticationConsumerFactory<?, ?, ?>> createTypeMap =","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/core/auth/core/AuthenticationManager.java#L34-L70","documentation":"AuthenticationManager.registerConsumerFactory() validates that a consumer factory's ConsumedType is an interface or a subtype of AuthenticationProvider. The message 'AuthenticationManager.ConsumedTypeError' is a localized message key violation: the factory is registered with a consumed type that the manager cannot dispatch providers for.","triggerScenarios":"Registering an AuthenticationConsumerFactory whose getConsumedType() returns a concrete class that is neither an interface nor assignable from AuthenticationProvider — e.g. a plain POJO parameter type on the consume() method.","commonSituations":"Defining a consumer whose consume() takes a custom concrete credential class instead of an interface; refactoring that changed an interface to a class; forgetting to implement AuthenticationProvider on a provider type.","solutions":["Make the consumed type an interface, or have it implement org.pentaho.di.core.auth.AuthenticationProvider.","Fix getConsumedType() in the factory to return the correct interface type.","Check message key AuthenticationManager.ConsumedTypeError in the auth messages properties for the exact parameterized detail."],"exampleFix":"// before\npublic class MyCreds { ... } // concrete, not an AuthenticationProvider\n// after\npublic interface MyCreds extends AuthenticationProvider { ... }","handlingStrategy":"validation","validationCode":"Class<?> consumed = factory.getConsumedType();\nif (!consumed.isInterface() && !AuthenticationProvider.class.isAssignableFrom(consumed)) {\n  throw new IllegalArgumentException(consumed + \" must be an interface or AuthenticationProvider\");\n}","typeGuard":null,"tryCatchPattern":"try { manager.registerConsumerFactory(factory); } catch (AuthenticationFactoryException e) { logError(\"Bad consumed type on \" + factory, e); }","preventionTips":["Model consumed credential types as interfaces","Implement AuthenticationProvider on provider types","Check factory.getConsumedType() before registering"],"tags":["authentication","type-mismatch","registration"],"backgroundTag":"invalid-argument-value","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}