{"record":{"id":"ec0a4d4091280ff1","repo":"apache/beam","slug":"unable-to-parse-process-environment-config-s","errorCode":null,"errorMessage":"Unable to parse process environment config: %s","messagePattern":"Unable to parse process environment config: (.+?)","errorType":"exception","errorClass":"java.lang.RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/Environments.java","lineNumber":278,"sourceCode":"      if (processCommand.isEmpty()) {\n        throw new IllegalArgumentException(\n            String.format(\n                \"Environment option '%s' must be set for process environment.\",\n                processCommandOption));\n      }\n      return createProcessEnvironment(\"\", \"\", processCommand, getProcessVariables(options));\n    }\n    try {\n      ProcessPayloadReferenceJSON payloadReferenceJSON =\n          MAPPER.readValue(\n              options.getDefaultEnvironmentConfig(), ProcessPayloadReferenceJSON.class);\n      return createProcessEnvironment(\n          payloadReferenceJSON.getOs(),\n          payloadReferenceJSON.getArch(),\n          payloadReferenceJSON.getCommand(),\n          payloadReferenceJSON.getEnv());\n    } catch (IOException e) {\n      throw new RuntimeException(\n          String.format(\n              \"Unable to parse process environment config: %s\",\n              options.getDefaultEnvironmentConfig()),\n          e);\n    }\n  }\n\n  public static Environment createProcessEnvironment(\n      String os, String arch, String command, Map<String, String> env) {\n    ProcessPayload.Builder builder = ProcessPayload.newBuilder();\n    if (!Strings.isNullOrEmpty(os)) {\n      builder.setOs(os);\n    }\n    if (!Strings.isNullOrEmpty(arch)) {\n      builder.setArch(arch);\n    }\n    if (!Strings.isNullOrEmpty(command)) {\n      builder.setCommand(command);","sourceCodeStart":260,"sourceCodeEnd":296,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/Environments.java#L260-L296","documentation":"When the default environment type is PROCESS and defaultEnvironmentConfig holds a JSON payload describing the process environment, a failure to parse that JSON (IOException) is rethrown as a RuntimeException naming the config string. The config must be valid JSON with fields like os, arch, command, env.","triggerScenarios":"Setting PortablePipelineOptions.setDefaultEnvironmentConfig to malformed JSON, or JSON whose shape does not match the ProcessPayload proto (so Jackson/PB parsing throws IOException).","commonSituations":"Hand-editing the environment config JSON and introducing syntax errors; passing a command string instead of JSON; quoting/shell-escaping issues when setting the option via CLI.","solutions":["Validate that defaultEnvironmentConfig is well-formed JSON matching the process payload schema ({\"command\": ..., \"os\": ..., \"arch\": ..., \"env\": {...}})","Prefer environmentOptions (e.g. process_command=...) instead of defaultEnvironmentConfig for process environments","Print and lint the config JSON before submitting the pipeline"],"exampleFix":"// before\noptions.setDefaultEnvironmentConfig(\"java -jar harness.jar\");\n// after\noptions.setDefaultEnvironmentConfig(\"{\\\"command\\\":\\\"java -jar harness.jar\\\"}\");","handlingStrategy":"validation","validationCode":"String cfg = options.getDefaultEnvironmentConfig();\nif (cfg != null) { new ObjectMapper().readTree(cfg); // throws if malformed\n  if (!cfg.trim().startsWith(\"{\")) throw new IllegalArgumentException(\"config must be a JSON object\"); }","typeGuard":null,"tryCatchPattern":"try { env = Environments.createOrGetDefaultEnvironment(options); } catch (RuntimeException e) { if (e.getMessage().startsWith(\"Unable to parse process environment config\")) { /* fix the JSON config */ } }","preventionTips":["Validate JSON configs with a linter before setting them","Prefer environmentOptions over defaultEnvironmentConfig for process environments","Beware shell quoting when passing JSON via CLI"],"tags":["java","apache-beam","json-parse","environment-config"],"backgroundTag":"json-parse-error","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}