{"record":{"id":"7ec977ce0e83df29","repo":"apache/beam","slug":"paneinfo-unsupported-in-s","errorCode":null,"errorMessage":"PaneInfo unsupported in %s","messagePattern":"PaneInfo unsupported in (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/reflect/DoFnInvoker.java","lineNumber":426,"sourceCode":"      throw new UnsupportedOperationException(\n          String.format(\"Restriction unsupported in %s\", getErrorContext()));\n    }\n\n    @Override\n    public BoundedWindow window() {\n      throw new UnsupportedOperationException(\n          String.format(\"BoundedWindow unsupported in %s\", getErrorContext()));\n    }\n\n    @Override\n    public PaneInfo paneInfo(DoFn<InputT, OutputT> doFn) {\n      throw new UnsupportedOperationException(\n          String.format(\"PaneInfo unsupported in %s\", getErrorContext()));\n    }\n\n    @Override\n    public PipelineOptions pipelineOptions() {\n      throw new UnsupportedOperationException(\n          String.format(\"PipelineOptions unsupported in %s\", getErrorContext()));\n    }\n\n    @Override\n    public DoFn<InputT, OutputT>.StartBundleContext startBundleContext(DoFn<InputT, OutputT> doFn) {\n      throw new UnsupportedOperationException(\n          String.format(\"StartBundleContext unsupported in %s\", getErrorContext()));\n    }\n\n    @Override\n    public DoFn<InputT, OutputT>.FinishBundleContext finishBundleContext(\n        DoFn<InputT, OutputT> doFn) {\n      throw new UnsupportedOperationException(\n          String.format(\"FinishBundleContext unsupported in %s\", getErrorContext()));\n    }\n\n    @Override\n    public DoFn<InputT, OutputT>.OnTimerContext onTimerContext(DoFn<InputT, OutputT> doFn) {","sourceCodeStart":408,"sourceCodeEnd":444,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/reflect/DoFnInvoker.java#L408-L444","documentation":"paneInfo() throws UnsupportedOperationException because this invoker has no PaneInfo provider bound. PaneInfo describes triggering/pane index for late-data and triggering scenarios; without a provider the invoker cannot supply it. The error context names the unsupported invoker.","triggerScenarios":"Calling paneInfo(DoFn) on a base DelegatingDoFnInvoker; DoFn code calling context.paneInfo() in a runner or test harness that does not provide pane information.","commonSituations":"DoFns handling triggered/late panes executed on a runner without pane-info support; unit tests invoking the DoFn with a stub invoker that omits paneInfo.","solutions":["Take PaneInfo as a @ProcessElement/@OnTimer method parameter so the runner injects it","Bind a paneInfo factory when constructing the invoker","Check that the runner supports triggering/pane info (e.g. proper streaming runner)","Avoid paneInfo access in contexts known to be non-triggered (treat unsupported as PaneInfo.NO_FIRING)"],"exampleFix":"// before\nPaneInfo pi = context.paneInfo(); // throws\n// after\n@ProcessElement\npublic void process(ProcessContext c, PaneInfo pane) { /* use pane */ }","handlingStrategy":"type-guard","validationCode":"boolean paneAware = context instanceof /* context exposing PaneInfo */;","typeGuard":"null","tryCatchPattern":"try { PaneInfo pi = invoker.paneInfo(doFn); } catch (UnsupportedOperationException e) { pi = PaneInfo.NO_FIRING; }","preventionTips":["Request PaneInfo as a method parameter instead of context access","Use runners that support triggering and pane info","Don't rely on pane info in batch/test contexts without triggering"],"tags":["apache-beam","java","unsupported-operation","windowing"],"backgroundTag":"unsupported-operation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}