{"record":{"id":"72ab9a4f06306829","repo":"quarkusio/quarkus","slug":"decorated-type-not-found-in-the-bean-archive-index","errorCode":null,"errorMessage":"Decorated type not found in the bean archive index: ${decoratedType}","messagePattern":"Decorated type not found in the bean archive index: (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/DecoratorGenerator.java","lineNumber":296,"sourceCode":"                        decoratorMethods.add(decoratorMethod);\n                    }\n                }\n\n                if (!clazz.isInterface() && clazz.superName() != null) {\n                    worklist.add(index.getClassByName(clazz.superName()));\n                }\n                for (DotName iface : clazz.interfaceNames()) {\n                    worklist.add(index.getClassByName(iface));\n                }\n            }\n\n            // Find non-decorated methods from all decorated types\n            Set<MethodDesc> abstractMethods = new HashSet<>();\n            Map<MethodDesc, MethodDesc> bridgeMethods = new HashMap<>();\n            for (Type decoratedType : decorator.getDecoratedTypes()) {\n                ClassInfo decoratedInterface = index.getClassByName(decoratedType.name());\n                if (decoratedInterface == null) {\n                    throw new IllegalStateException(\"Decorated type not found in the bean archive index: \" + decoratedType);\n                }\n\n                // A decorated type can declare type parameters\n                // For example Converter<String> should result in a T -> String mapping\n                boolean isDecoratedInterfaceGeneric = !decoratedInterface.typeParameters().isEmpty();\n                Map<String, Type> resolvedTypeParameters = Types.resolveDecoratedTypeParams(decoratedInterface, decorator);\n\n                for (MethodInfo method : decoratedInterface.methods()) {\n                    if (Methods.skipForDelegateSubclass(method)) {\n                        continue;\n                    }\n                    MethodDesc methodDesc = methodDescOf(method);\n\n                    // Create a resolved descriptor variant if a param contains a type variable\n                    // E.g. ping(T) -> ping(String)\n                    MethodDesc resolvedMethodDesc;\n                    if (isDecoratedInterfaceGeneric && (Methods.containsTypeVariableParameter(method)\n                            || Types.containsTypeVariable(method.returnType()))) {","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/DecoratorGenerator.java#L278-L314","documentation":"To implement a decorator's abstract methods for each decorated type, Arc looks the decorated interface up in the bean archive index. If the index (built from application classes) does not contain the interface, Arc cannot synthesize the implementation and throws this IllegalStateException.","triggerScenarios":"A decorator implements a decorated interface that is not part of any indexed bean archive - e.g. generated at runtime, missing from the Jandex index, or excluded by indexing configuration.","commonSituations":"The decorated interface lives in a dependency not indexed by Quarkus (missing Jandex index or not on the application archive); interface produced by annotation processing; index excludes filters dropping the package.","solutions":["Ensure the decorated interface is on the application classpath so it gets indexed","Add a Jandex index (jandex-maven-plugin or META-INF/jandex.idx) to the library providing the interface","Check quarkus.index-dependency / index inclusion configuration for that dependency","Clean rebuild so the index is regenerated"],"exampleFix":"// before: library without index\n// after (library pom)\n<plugin>\n  <groupId>io.smallrye</groupId>\n  <artifactId>jandex-maven-plugin</artifactId>\n</plugin>","handlingStrategy":"validation","validationCode":"// verify the decorated interface is in the Jandex index before use\n// e.g. run: mvn io.smallrye:jandex-maven-plugin:jandex -pl :my-lib\n// and confirm META-INF/jandex.idx contains the interface","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add jandex-maven-plugin to libraries supplying decorated interfaces","Check quarkus.index-dependency configuration for external modules","Keep decorated interfaces in indexed application modules"],"tags":["quarkus","arc","cdi","decorator","jandex-index"],"backgroundTag":"class-not-in-bean-archive-index","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}