{"record":{"id":"0e1ab386714e0a1c","repo":"perwendel/spark","slug":"no-embedded-server-matching-the-identifier","errorCode":null,"errorMessage":"No embedded server matching the identifier","messagePattern":"No embedded server matching the identifier","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/main/java/spark/embeddedserver/EmbeddedServers.java","lineNumber":82,"sourceCode":"     *\n     * @param identifier               the identifier\n     * @param routeMatcher             the route matcher\n     * @param staticFilesConfiguration the static files configuration object\n     * @param multipleHandlers         true if other handlers exist\n     * @return the created EmbeddedServer object\n     */\n    public static EmbeddedServer create(Object identifier,\n                                        Routes routeMatcher,\n                                        ExceptionMapper exceptionMapper,\n                                        StaticFilesConfiguration staticFilesConfiguration,\n                                        boolean multipleHandlers) {\n\n        EmbeddedServerFactory factory = factories.get(identifier);\n\n        if (factory != null) {\n            return factory.create(routeMatcher, staticFilesConfiguration, exceptionMapper, multipleHandlers);\n        } else {\n            throw new RuntimeException(\"No embedded server matching the identifier\");\n        }\n    }\n\n    /**\n     * Adds an Embedded server factory for the provided identifier.\n     *\n     * @param identifier the identifier\n     * @param factory    the factory\n     */\n    public static void add(Object identifier, EmbeddedServerFactory factory) {\n        factories.put(identifier, factory);\n    }\n\n}\n","sourceCodeStart":64,"sourceCodeEnd":97,"githubUrl":"https://github.com/perwendel/spark/blob/1973e402f5d4c1442ad34a1d38ed0758079f7773/src/main/java/spark/embeddedserver/EmbeddedServers.java#L64-L97","documentation":"EmbeddedServers.create() selects an EmbeddedServerFactory from a registry keyed by an EmbeddedServerIdentifier. If the identifier is not registered (only Jetty is registered by default; others must be added via EmbeddedServers.add), there is no factory to build the server and Spark throws RuntimeException('No embedded server matching the identifier').","triggerScenarios":"Calling EmbeddedServers.create(identifier, ...) with an identifier never added via EmbeddedServers.add(), or configuring Service.embeddedServerIdentifier(...) with a custom identifier without registering a matching factory first.","commonSituations":"Custom identifier set via Spark.embeddedServerIdentifier(MyServer.ID) but the EmbeddedServers.add(...) registration call was removed, never executed, or runs after server creation; typos in the identifier.","solutions":["Register the factory before server creation: EmbeddedServers.add(myIdentifier, myFactory) early in bootstrap.","If you intended the default, don't set a custom embeddedServerIdentifier — omit it so Spark uses Jetty.","Verify the identifier value matches the one used in EmbeddedServers.add exactly.","Only use Service.embeddedServerIdentifier() before route mapping in embedded-server mode."],"exampleFix":"// before\nSpark.embeddedServerIdentifier(\"my-server\"); // no factory registered\n// after\nEmbeddedServers.add(() -> \"my-server\", (r, s, e, m) -> new MyEmbeddedServer(r, s));\nSpark.embeddedServerIdentifier(\"my-server\");","handlingStrategy":"try-catch","validationCode":"// ensure registration before create/use\nEmbeddedServers.add(myIdentifier, myFactory);\nSpark.embeddedServerIdentifier(myIdentifier);","typeGuard":null,"tryCatchPattern":"try {\n    EmbeddedServers.create(identifier, routeMatcher, staticFiles, exceptionMapper, multipleHandlers);\n} catch (RuntimeException e) {\n    if (e.getMessage().contains(\"No embedded server matching\")) {\n        EmbeddedServers.add(identifier, defaultFactory);\n        // retry create\n    } else { throw e; }\n}","preventionTips":["Register custom factories before any server creation happens.","Prefer the default Jetty identifier unless you truly need a custom server.","Keep factory registration in static init or the very first lines of main()."],"tags":["java","embedded-server","configuration"],"backgroundTag":"missing-config-value","analyzedSha":"1973e402f5d4c1442ad34a1d38ed0758079f7773","analyzedAt":"2026-09-10T14:38:22.866Z","contentChangedAt":"2026-09-10T14:38:22.866Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}