{"record":{"id":"e5cf2f91be07b21e","repo":"apache/beam","slug":"only-one-of-expansion-service-s-or-classpath-s-may-be","errorCode":null,"errorMessage":"Only one of expansion_service (%s) or classpath (%s) may be provided.","messagePattern":"Only one of expansion_service \\((.+?)\\) or classpath \\((.+?)\\) may be provided\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/transforms/external.py","lineNumber":617,"sourceCode":"  One builds these transforms just as one would in Java, e.g.::\n\n      transform = JavaExternalTransform('fully.qualified.ClassName'\n          )(contructorArg, ... ).builderMethod(...)\n\n  or::\n\n      JavaExternalTransform('fully.qualified.ClassName').staticConstructor(\n          ...).builderMethod1(...).builderMethod2(...)\n\n  :param class_name: fully qualified name of the java class\n  :param expansion_service: (Optional) an expansion service to use.  If none is\n      provided, a default expansion service will be started.\n  :param classpath: (Optional) A list paths to additional jars to place on the\n      expansion service classpath.\n  \"\"\"\n  def __init__(self, class_name, expansion_service=None, classpath=None):\n    if expansion_service and classpath:\n      raise ValueError(\n          f'Only one of expansion_service ({expansion_service}) '\n          f'or classpath ({classpath}) may be provided.')\n    self._payload_builder = JavaClassLookupPayloadBuilder(class_name)\n    self._classpath = classpath\n    self._expansion_service = expansion_service\n    # Beam explicitly looks for following attributes. Hence adding\n    # 'None' values here to prevent '__getattr__' from being called.\n    self.inputs = None\n    self._fn_api_payload = None\n\n  def __call__(self, *args, **kwargs):\n    self._payload_builder.with_constructor(*args, **kwargs)\n    return self\n\n  def __getattr__(self, name):\n    # Don't try to emulate special methods.\n    if name.startswith('__') and name.endswith('__'):\n      return super().__getattr__(name)","sourceCodeStart":599,"sourceCodeEnd":635,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/transforms/external.py#L599-L635","documentation":"JavaExternalTransform.__init__ got both an explicit expansion_service and a classpath; the two are mutually exclusive ways to locate the Java transform (remote service vs. locally started service from jars), so passing both is rejected.","triggerScenarios":"Thrown at sdks/python/apache_beam/transforms/external.py:617 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass only classpath jars and let Beam start the service locally","Or pass only expansion_service (e.g. 'localhost:8097') and drop classpath"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}