{"record":{"id":"90f64ff7b8d8e246","repo":"aeron-io/aeron","slug":"input-string-must-not-be-null-or-empty","errorCode":null,"errorMessage":"input string must not be null or empty","messagePattern":"input string must not be null or empty","errorType":"validation","errorClass":"NullPointerException","httpStatus":null,"severity":"error","filePath":"aeron-driver/src/main/java/io/aeron/driver/media/SocketAddressParser.java","lineNumber":55,"sourceCode":"    }\n\n    /**\n     * Parse socket addresses from a {@link String}.\n     * <p>\n     * Supports hostname:port, ipV4Address:port, [ipV6Address]:port, and name.\n     *\n     * @param value          to be parsed for the socket address.\n     * @param uriParamName   for the parse.\n     * @param isReResolution for the parse.\n     * @param nameResolver   to be used for resolving hostnames.\n     * @return An {@link InetSocketAddress} for the parsed input.\n     */\n    static InetSocketAddress parse(\n        final String value, final String uriParamName, final boolean isReResolution, final NameResolver nameResolver)\n    {\n        if (Strings.isEmpty(value))\n        {\n            throw new NullPointerException(\"input string must not be null or empty\");\n        }\n\n        final String nameAndPort = nameResolver.lookup(value, uriParamName, isReResolution);\n        ParseResult result = tryParseIpV4(nameAndPort);\n        if (null == result)\n        {\n            result = tryParseIpV6(nameAndPort);\n        }\n        if (null == result)\n        {\n            throw new IllegalArgumentException(\"invalid format: \" + nameAndPort);\n        }\n\n        final InetAddress inetAddress = nameResolver.resolve(result.host, uriParamName, isReResolution);\n        return null == inetAddress ? InetSocketAddress.createUnresolved(result.host, result.port) :\n        new InetSocketAddress(inetAddress, result.port);\n    }\n","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-driver/src/main/java/io/aeron/driver/media/SocketAddressParser.java#L37-L73","documentation":"SocketAddressParser.parse throws NullPointerException when the input string is null or empty, before any parsing occurs. The parser requires a concrete host:port string to resolve into an InetSocketAddress. The NPE intentionally encodes 'missing required input'.","triggerScenarios":"Calling SocketAddressParser.parse(null, ...) or parse(\"\", paramName, ...), typically when a channel URI parameter (endpoint or control) is empty or a NameResolver lookup yields an empty value.","commonSituations":"Channel URI missing the endpoint value entirely (aeron:udp?endpoint=); URI parameter extraction returning empty string; custom NameResolver returning empty lookup results.","solutions":["Ensure the channel URI includes a non-empty endpoint or control value, e.g. aeron:udp?endpoint=127.0.0.1:40456","Check the custom NameResolver implementation's lookup() never returns null/empty for configured names","Catch NullPointerException from parse and log the offending URI parameter name to find the empty value"],"exampleFix":"// before\nString uri = \"aeron:udp?endpoint=\"; // empty endpoint\n// after\nString uri = \"aeron:udp?endpoint=127.0.0.1:40456\";","handlingStrategy":"validation","validationCode":"if (value == null || value.isEmpty()) {\n    throw new IllegalArgumentException(\"endpoint/control value for \" + paramName + \" must not be empty\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    InetSocketAddress addr = SocketAddressParser.parse(value, name, false, NameResolver.NULL_NAME_RESOLVER);\n} catch (NullPointerException e) {\n    // value was null/empty: fix URI or resolver\n}","preventionTips":["Never emit URI parameters with empty values; omit them instead","Test custom NameResolver.lookup() implementations for empty returns","Validate URIs at startup before handing them to Aeron"],"tags":["parsing","uri","socket-address"],"backgroundTag":"empty-required-field","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}