{"record":{"id":"aa22fc827db656cf","repo":"apache/beam","slug":"cannot-resolve-artifact-information-s","errorCode":null,"errorMessage":"Cannot resolve artifact information: %s","messagePattern":"Cannot resolve artifact information: (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/DefaultArtifactResolver.java","lineNumber":66,"sourceCode":"              return Optional.of(ImmutableList.of(info));\n            } else {\n              return Optional.empty();\n            }\n          });\n\n  private synchronized List<ResolutionFn> regesteredFns() {\n    return ImmutableList.copyOf(fns);\n  }\n\n  private Function<RunnerApi.ArtifactInformation, Stream<RunnerApi.ArtifactInformation>> resolver =\n      (info) -> {\n        for (ResolutionFn fn : Lists.reverse(regesteredFns())) {\n          Optional<List<RunnerApi.ArtifactInformation>> resolved = fn.resolve(info);\n          if (resolved.isPresent()) {\n            return resolved.get().stream();\n          }\n        }\n        throw new RuntimeException(String.format(\"Cannot resolve artifact information: %s\", info));\n      };\n\n  @Override\n  public synchronized void register(ResolutionFn fn) {\n    fns.add(fn);\n  }\n\n  @Override\n  public List<RunnerApi.ArtifactInformation> resolveArtifacts(\n      List<RunnerApi.ArtifactInformation> artifacts) {\n    for (ResolutionFn fn : Lists.reverse(regesteredFns())) {\n      List<RunnerApi.ArtifactInformation> moreResolved = new ArrayList<>();\n      for (RunnerApi.ArtifactInformation artifact : artifacts) {\n        Optional<List<RunnerApi.ArtifactInformation>> resolved = fn.resolve(artifact);\n        if (resolved.isPresent()) {\n          moreResolved.addAll(resolved.get());\n        } else {\n          moreResolved.add(artifact);","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/DefaultArtifactResolver.java#L48-L84","documentation":"DefaultArtifactResolver's resolve function iterates all registered resolution functions; if none can resolve the artifact staging information, it throws a RuntimeException. It means no registered resolver (local file, staged file, etc.) knows how to turn the artifact into retrievable ArtifactInformation.","triggerScenarios":"Calling the resolver with an ArtifactInformation whose type URN or role payload matches no registered ResolutionFn — e.g. artifacts staged with an unsupported environment type or a custom artifact type during pipeline translation/retrieval.","commonSituations":"Running a portable pipeline with artifacts staged by a different runner/SDK version; custom environments whose artifacts bypass standard resolvers; cross-language pipelines where the staging service produced an unfamiliar artifact type.","solutions":["Register a custom ResolutionFn via DefaultArtifactResolver.register that handles the unresolvable artifact type","Use the standard environment/artifact staging flow so artifacts get a supported type URN","Check SDK/runner version mismatch and align versions so built-in resolvers cover the artifact types"],"exampleFix":"// before\nnew DefaultArtifactResolver().resolve(artifactInformation);\n// after\nDefaultArtifactResolver resolver = new DefaultArtifactResolver();\nresolver.register(info -> myCustomResolve(info)); // handle the unknown type first\nList<RunnerApi.ArtifactInformation> resolved = resolver.resolve(artifactInformation);","handlingStrategy":"validation","validationCode":"// before resolving, check the artifact type URN is one your resolvers support\nif (!SUPPORTED_ARTIFACTURNS.contains(info.getTypeUrn())) {\n  throw new IllegalStateException(\"Unhandled artifact type: \" + info.getTypeUrn());\n}","typeGuard":null,"tryCatchPattern":"try { resolved = resolver.resolve(info); } catch (RuntimeException e) { if (e.getMessage().startsWith(\"Cannot resolve artifact information\")) { /* register a fallback ResolutionFn */ } }","preventionTips":["Register resolvers before resolving artifacts","Keep submitting and executing SDK versions aligned","Prefer standard artifact type URNs"],"tags":["java","apache-beam","artifact-staging","portable-pipeline"],"backgroundTag":"resource-not-found","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"}