{"record":{"id":"6629737c62c0a3e0","repo":"jwtk/jjwt","slug":"a-key-class-getname-or-one-or-more-name-value","errorCode":null,"errorMessage":"A ${Key.class.getName()} or one or more name/value pairs must be provided to create a JWK.","messagePattern":"A (.+?) or one or more name/value pairs must be provided to create a JWK\\.","errorType":"validation","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"impl/src/main/java/io/jsonwebtoken/impl/security/AbstractJwkBuilder.java","lineNumber":149,"sourceCode":"        Parameter<Set<KeyOperation>> param = Parameters.builder(KeyOperation.class)\n                .setConverter(new KeyOperationConverter(registry)).set()\n                .setId(AbstractJwk.KEY_OPS.getId())\n                .setName(AbstractJwk.KEY_OPS.getName())\n                .build();\n        setDelegate(this.DELEGATE.parameter(param));\n        return self();\n    }\n\n    @Override\n    public J build() {\n\n        //should always exist as there isn't a way to set it outside the constructor:\n        Assert.stateNotNull(this.DELEGATE, \"JwkContext should always be non-null\");\n\n        K key = this.DELEGATE.getKey();\n        if (key == null && isEmpty()) {\n            String msg = \"A \" + Key.class.getName() + \" or one or more name/value pairs must be provided to create a JWK.\";\n            throw new IllegalStateException(msg);\n        }\n\n        try {\n            this.opsPolicy.validate(this.DELEGATE.get(AbstractJwk.KEY_OPS));\n            return jwkFactory.createJwk(this.DELEGATE);\n        } catch (IllegalArgumentException iae) {\n            //if we get an IAE, it means the builder state wasn't configured enough in order to create\n            String msg = \"Unable to create JWK: \" + iae.getMessage();\n            throw new MalformedKeyException(msg, iae);\n        }\n    }\n\n    static class DefaultSecretJwkBuilder extends AbstractJwkBuilder<SecretKey, SecretJwk, SecretJwkBuilder>\n            implements SecretJwkBuilder {\n        public DefaultSecretJwkBuilder(JwkContext<SecretKey> ctx) {\n            super(ctx);\n            // assign a standard algorithm if possible:\n            Key key = Assert.notNull(ctx.getKey(), \"SecretKey cannot be null.\");","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/jwtk/jjwt/blob/fb71496164c71442d08adec4571d9616ed5e1b8d/impl/src/main/java/io/jsonwebtoken/impl/security/AbstractJwkBuilder.java#L131-L167","documentation":"AbstractJwkBuilder.build() requires either a Key set on the context or at least one name/value pair (isEmpty() false). If neither is present it throws IllegalStateException because there is nothing from which to construct a JWK.","triggerScenarios":"Calling Jwks.builder().build() without calling setKey/put for any JWK parameter — an entirely empty builder, e.g. Jwks.builder().build() bare.","commonSituations":"Forgot to set key material or fields like kty/n/e; builder constructed from an empty Map; refactoring removed the put calls; conditional code path skipped key assignment.","solutions":["Set key material: Jwks.builder().setKey(key).build().","Provide JWK fields, e.g. Jwks.builder().put(\"kty\",\"RSA\").put(\"n\",...).put(\"e\",...).build().","Check builder state with isEmpty()/getKey() before calling build().","Catch IllegalStateException and surface a user-facing 'no key configured' message."],"exampleFix":"// before\nJwk<?> jwk = Jwks.builder().build();\n// after\nJwk<?> jwk = Jwks.builder().setKey(publicKey).build();","handlingStrategy":"validation","validationCode":"if (builder.getKey() == null && builder.isEmpty()) { throw new IllegalStateException(\"No key or name/value pairs set for JWK\"); }","typeGuard":null,"tryCatchPattern":"try { Jwk<?> jwk = builder.build(); }\ncatch (IllegalStateException e) { throw new ConfigurationException(\"JWK not configured: \" + e.getMessage()); }","preventionTips":["Always set a Key or at least one JWK member before build().","Guard builder calls behind a config-validation step.","Never call build() on a freshly created builder."],"tags":["jwk","builder","illegal-state","jjwt"],"backgroundTag":"missing-required-argument","analyzedSha":"fb71496164c71442d08adec4571d9616ed5e1b8d","analyzedAt":"2026-09-09T00:33:09.982Z","contentChangedAt":"2026-09-09T00:33:09.982Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}