{"record":{"id":"97300b9e75ba3fce","repo":"quarkusio/quarkus","slug":"expected-after-attribute","errorCode":null,"errorMessage":"Expected : after attribute","messagePattern":"Expected : after attribute","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/builder/src/main/java/io/quarkus/builder/JsonReader.java","lineNumber":133,"sourceCode":"                case '\"':\n                    readMember(members);\n                    break;\n            }\n        }\n\n        throw new IllegalArgumentException(\"Json object ended without }\");\n    }\n\n    /**\n     * member\n     * |----- ws string ws ':' element\n     */\n    private void readMember(Map<JsonString, JsonValue> members) {\n        final JsonString attribute = readString();\n        ignoreWhitespace();\n        final int colon = nextChar();\n        if (':' != colon) {\n            throw new IllegalArgumentException(\"Expected : after attribute\");\n        }\n        final JsonValue element = readElement();\n        members.put(attribute, element);\n    }\n\n    /**\n     * array\n     * |---- '[' ws ']'\n     * |---- '[' elements ']'\n     * </p>\n     * elements\n     * |----- element\n     * |----- element ',' elements\n     */\n    private JsonValue readArray() {\n        position++;\n\n        final List<JsonValue> elements = new ArrayList<>();","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/core/builder/src/main/java/io/quarkus/builder/JsonReader.java#L115-L151","documentation":"AcmeFileSystemProvider's constructor loads CommonBean by name through the thread context classloader and instantiates reflectively; any failure (class not found, no default constructor, reflective-invocation exception) is wrapped in IllegalStateException(\"Failed to create an instance of ...\"). It indicates the TCCL cannot see or construct CommonBean — a classloading setup problem in this custom NIO FileSystemProvider test fixture.","triggerScenarios":"Constructing the provider when Thread.currentThread().getContextClassLoader() cannot load io.quarkus.gradle...CommonBean (or equivalent), or the class lacks an accessible no-arg constructor, or newInstance() throws.","commonSituations":"Provider SPI registered in META-INF/services but loaded with a classloader lacking CommonBean on the classpath; custom-filesystem-provider jar not built/installed before the gradle test; TCCL reset by another framework; shading renaming CommonBean.","solutions":["Build/install the custom-filesystem-provider module (it must be compiled and on the classpath together with CommonBean).","Verify the TCCL at provider construction time can load CommonBean (set context classloader explicitly if needed).","Check META-INF/services/java.nio.file.spi.FileSystemProvider registration matches the provider class.","Ensure CommonBean has a public no-arg constructor and its FQN was not changed by relocation/refactoring."],"exampleFix":"// before\nbean = (CommonBean) Thread.currentThread().getContextClassLoader()\n    .loadClass(CommonBean.class.getName()).getDeclaredConstructor().newInstance();\n// after\nClassLoader tccl = Thread.currentThread().getContextClassLoader();\nif (tccl == null) { tccl = AcmeFileSystemProvider.class.getClassLoader(); }\nClass<?> clazz = Class.forName(CommonBean.class.getName(), true, tccl);\nbean = (CommonBean) clazz.getDeclaredConstructor().newInstance();","handlingStrategy":"try-catch","validationCode":"if (given().header(\"tenantId\", tenant).get(\"/fruits/\" + id).getStatusCode() == 404) {\n    throw new SkipException(\"No fruit \" + id + \" for tenant \" + tenant);\n}","typeGuard":null,"tryCatchPattern":"try {\n    Fruit f = given().header(\"tenantId\", tenant).get(\"/fruits/\" + id).then()\n        .statusCode(200).extract().as(Fruit.class);\n} catch (AssertionError notFound) {\n    // 404: handle missing entity for this tenant\n}","preventionTips":["Pair create and read calls with the same tenant header","Seed fruits per tenant before lookup-based tests","Capture ids from creation responses rather than constants","Remember entity lookups go through ORM with tenant filter, not the Elasticsearch index"],"tags":["classpath","classloader","nio","filesystem-provider","reflection"],"backgroundTag":"classnotfound-context-classloader","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}