Hello everyone,

We managed to find a solution for executing a wayang plan via the REST Api.

We found that we needed to set the Configuraion object in the Wayang JSON Plan 
under Context:

We ran the following plan, and it worked perfectly. We still haven't been able 
to setup the python API, but at least we found how the issue with the wayang 
plan. Thank you very much for your help. FYI if you remove either platforms, or 
configuraion under context it will throw an error.

{
"context":{
"platforms":[
"java",
"spark"
],
"configuration" : {
"spark-driver": "localhost"
},
"origin":"python"
},
"operators":[
{
"id":1,
"cat":"input",
"input":[

],
"output":[
2
],
"operatorName":"textFileInput",
"data":{
"filename":"file:///Users/christofferkristensen/documents/myfile123.txt"
}
},
{
"id":2,
"cat":"output",
"input":[
1
],
"output":[

],
"operatorName":"textFileOutput",
"data":{
"filename":"file:///Users/christofferkristensen/desktop/test-wayang-out.txt"
}
}
]
}



________________________________
From: Christoffer Emil Kristensen <c...@itu.dk.INVALID>
Sent: Wednesday, April 2, 2025 9:02 AM
To: dev@wayang.apache.org <dev@wayang.apache.org>
Subject: Re: Wayang REST api

Hello,

I just tried to run it in a completely new virtual environment:

[cid:53d98731-59cb-4922-afe1-9a24db1f6d3e]

There should not be any conflicting packages here. But i still get the same 
error when running:

Python3 -m pip install dist/pywy-0.7.1.tar.gz

I have added the entire stacktrace here, dont know if it helps:

(.venv-wayang) (base) christofferkristensen@Christoffers-MacBook-Air python % 
Python -m pip install dist/pywy-0.7.1.tar.gz
Processing ./dist/pywy-0.7.1.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting cloudpickle==3.0.0 (from pywy==0.7.1)
  Using cached cloudpickle-3.0.0-py3-none-any.whl.metadata (7.0 kB)
Collecting requests==2.31.0 (from pywy==0.7.1)
  Using cached requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)
Collecting numpy==1.19.5 (from pywy==0.7.1)
  Using cached numpy-1.19.5.zip (7.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
ERROR: Exception:
Traceback (most recent call last):
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/cli/base_command.py",
 line 180, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/cli/req_command.py",
 line 245, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/commands/install.py",
 line 377, in run
    requirement_set = resolver.resolve(
                      ^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py",
 line 95, in resolve
    result = self._result = resolver.resolve(
                            ^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
 line 546, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
 line 427, in resolve
    failure_causes = self._attempt_to_pin_criterion(name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
 line 239, in _attempt_to_pin_criterion
    criteria = self._get_updated_criteria(candidate)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
 line 230, in _get_updated_criteria
    self._add_to_criteria(criteria, requirement, parent=candidate)
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
 line 173, in _add_to_criteria
    if not criterion.candidates:
           ^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py",
 line 156, in __bool__
    return bool(self._sequence)
           ^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
 line 155, in __bool__
    return any(self)
           ^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
 line 143, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
 line 47, in _iter_built
    candidate = func()
                ^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py",
 line 182, in _make_candidate_from_link
    base: Optional[BaseCandidate] = self._make_base_candidate_from_link(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py",
 line 228, in _make_base_candidate_from_link
    self._link_candidate_cache[link] = LinkCandidate(
                                       ^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
 line 290, in __init__
    super().__init__(
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
 line 156, in __init__
    self.dist = self._prepare()
                ^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
 line 222, in _prepare
    dist = self._prepare_distribution()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
 line 301, in _prepare_distribution
    return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/operations/prepare.py",
 line 525, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/operations/prepare.py",
 line 640, in _prepare_linked_requirement
    dist = _get_prepared_distribution(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/operations/prepare.py",
 line 71, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py",
 line 54, in prepare_distribution_metadata
    self._install_build_reqs(finder)
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py",
 line 124, in _install_build_reqs
    build_reqs = self._get_build_requires_wheel()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py",
 line 101, in _get_build_requires_wheel
    return backend.get_requires_for_build_wheel()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_internal/utils/misc.py",
 line 745, in get_requires_for_build_wheel
    return super().get_requires_for_build_wheel(config_settings=cs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py",
 line 166, in get_requires_for_build_wheel
    return self._call_hook('get_requires_for_build_wheel', {
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py",
 line 321, in _call_hook
    raise BackendUnavailable(data.get('traceback', ''))
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Traceback (most recent 
call last):
  File 
"/Users/christofferkristensen/Documents/SoftwareDesign/research_project/incubator-wayang/python/.venv-wayang/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py",
 line 77, in _build_backend
    obj = import_module(mod_path)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.12/importlib/__init__.py", line 90, in 
import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File 
"/private/var/folders/kq/74s0vpws7rb13lp23gc3ytd00000gn/T/pip-build-env-2yf0e2bd/overlay/lib/python3.12/site-packages/setuptools/__init__.py",
 line 9, in <module>
    import distutils.core
ModuleNotFoundError: No module named 'distutils'
________________________________
From: Aurélien Bertrand <aurelien9.bertr...@gmail.com>
Sent: Wednesday, March 26, 2025 1:39 PM
To: dev@wayang.apache.org <dev@wayang.apache.org>
Subject: Re: Wayang REST api

[You don't often get email from aurelien9.bertr...@gmail.com. Learn why this is 
important at https://aka.ms/LearnAboutSenderIdentification ]

It seems to be related to numpy. Could you try creating a new environment
specifically for this? So to avoid any corruption with package versions.

Unfortunately, I am not able to provide you one at the moment, maybe
someone else has one at hand? Otherwise tomorrow I can send you one for
sure!

Best regards,
Aurélien


On Wed, 26 Mar 2025 at 13:28, Christoffer Emil Kristensen
<c...@itu.dk.invalid> wrote:

> Hello,
>
> No i did not use the python -m build command. I just tried doing that, so
> inside the python folder i ran:
>
> Python -m build
>
> pip install --upgrade build
>
> Python3 -m pip install dist/pywy-1.0.0.0.tar.gz but this failed. I noticed
> that it crated the pywy-0.7.1.tar.gz file, and i ran the command instead of
> the pywy-1.(etc) and that worked. So i might be an idea to also update this
> in the documentation 🙂
>
>
>
>
> But after running that the pip install dist/ command failed with the error:
>
> (base) christofferkristensen@Christoffers-MacBook-Air python % python3 -m
> pip install dist/pywy-0.7.1.tar.gz
> Processing ./dist/pywy-0.7.1.tar.gz
>   Installing build dependencies ... done
>   Getting requirements to build wheel ... done
>   Preparing metadata (pyproject.toml) ... done
> Collecting cloudpickle==3.0.0 (from pywy==0.7.1)
>   Downloading cloudpickle-3.0.0-py3-none-any.whl.metadata (7.0 kB)
> Collecting requests==2.31.0 (from pywy==0.7.1)
>   Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)
> Collecting numpy==1.19.5 (from pywy==0.7.1)
>   Downloading numpy-1.19.5.zip (7.3 MB)
>      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3/7.3 MB 13.0 MB/s eta
> 0:00:00
>   Installing build dependencies ... done
>   Getting requirements to build wheel ... done
> ERROR: Exception:
> Traceback (most recent call last):
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/cli/base_command.py",
> line 180, in exc_logging_wrapper
>     status = run_func(*args)
>              ^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/cli/req_command.py",
> line 245, in wrapper
>     return func(self, options, args)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/commands/install.py",
> line 377, in run
>     requirement_set = resolver.resolve(
>                       ^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py",
> line 95, in resolve
>     result = self._result = resolver.resolve(
>                             ^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
> line 546, in resolve
>     state = resolution.resolve(requirements, max_rounds=max_rounds)
>             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
> line 427, in resolve
>     failure_causes = self._attempt_to_pin_criterion(name)
>                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
> line 239, in _attempt_to_pin_criterion
>     criteria = self._get_updated_criteria(candidate)
>                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
> line 230, in _get_updated_criteria
>     self._add_to_criteria(criteria, requirement, parent=candidate)
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py",
> line 173, in _add_to_criteria
>     if not criterion.candidates:
>            ^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py",
> line 156, in __bool__
>     return bool(self._sequence)
>            ^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
> line 155, in __bool__
>     return any(self)
>            ^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
> line 143, in <genexpr>
>     return (c for c in iterator if id(c) not in self._incompatible_ids)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
> line 47, in _iter_built
>     candidate = func()
>                 ^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py",
> line 182, in _make_candidate_from_link
>     base: Optional[BaseCandidate] = self._make_base_candidate_from_link(
>                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py",
> line 228, in _make_base_candidate_from_link
>     self._link_candidate_cache[link] = LinkCandidate(
>                                        ^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
> line 290, in __init__
>     super().__init__(
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
> line 156, in __init__
>     self.dist = self._prepare()
>                 ^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
> line 222, in _prepare
>     dist = self._prepare_distribution()
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
> line 301, in _prepare_distribution
>     return preparer.prepare_linked_requirement(self._ireq,
> parallel_builds=True)
>
>  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/operations/prepare.py",
> line 525, in prepare_linked_requirement
>     return self._prepare_linked_requirement(req, parallel_builds)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/operations/prepare.py",
> line 640, in _prepare_linked_requirement
>     dist = _get_prepared_distribution(
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/operations/prepare.py",
> line 71, in _get_prepared_distribution
>     abstract_dist.prepare_distribution_metadata(
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py",
> line 54, in prepare_distribution_metadata
>     self._install_build_reqs(finder)
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py",
> line 124, in _install_build_reqs
>     build_reqs = self._get_build_requires_wheel()
>                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py",
> line 101, in _get_build_requires_wheel
>     return backend.get_requires_for_build_wheel()
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_internal/utils/misc.py",
> line 745, in get_requires_for_build_wheel
>     return super().get_requires_for_build_wheel(config_settings=cs)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py",
> line 166, in get_requires_for_build_wheel
>     return self._call_hook('get_requires_for_build_wheel', {
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py",
> line 321, in _call_hook
>     raise BackendUnavailable(data.get('traceback', ''))
> pip._vendor.pyproject_hooks._impl.BackendUnavailable: Traceback (most
> recent call last):
>   File
> "/opt/anaconda3/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py",
> line 77, in _build_backend
>     obj = import_module(mod_path)
>           ^^^^^^^^^^^^^^^^^^^^^^^
>   File "/opt/anaconda3/lib/python3.12/importlib/__init__.py", line 90, in
> import_module
>     return _bootstrap._gcd_import(name[level:], package, level)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
>   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
>   File "<frozen importlib._bootstrap>", line 1310, in
> _find_and_load_unlocked
>   File "<frozen importlib._bootstrap>", line 488, in
> _call_with_frames_removed
>   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
>   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
>   File "<frozen importlib._bootstrap>", line 1331, in
> _find_and_load_unlocked
>   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
>   File "<frozen importlib._bootstrap_external>", line 995, in exec_module
>   File "<frozen importlib._bootstrap>", line 488, in
> _call_with_frames_removed
>   File
> "/private/var/folders/kq/74s0vpws7rb13lp23gc3ytd00000gn/T/pip-build-env-py7newgq/overlay/lib/python3.12/site-packages/setuptools/__init__.py",
> line 18, in <module>
>     from setuptools.extern.six import PY3, string_types
> ModuleNotFoundError: No module named 'setuptools.extern.six'
>
>
> Do you have any idea with this is related to?
>
> If it is possible do you have a chance to send me an example of a correct
> serialized wayang plan which i can test the api for? 🙂
>
> ------------------------------
> *From:* Aurélien Bertrand <aurelien9.bertr...@gmail.com>
> *Sent:* Wednesday, March 26, 2025 1:19 PM
> *To:* dev@wayang.apache.org <dev@wayang.apache.org>
> *Subject:* Re: Wayang REST api
>
> [You don't often get email from aurelien9.bertr...@gmail.com. Learn why
> this is important at https://aka.ms/LearnAboutSenderIdentification ]
>
> Does it complain about not finding the dist folder? If so, you first need
> to build the package with python -m build and then pip install (that step
> is missing from the documentation).
>
> Let me know if you get other issues.
>
>
> On Wed, 26 Mar 2025 at 13:05, Christoffer Emil Kristensen
> <c...@itu.dk.invalid> wrote:
>
> > Hello,
> >
> > I am trying to do this, but it can not find the python packages we are
> > importing.
> >
> > I tried to start setup python api per this guide:
> >
> https://github.com/apache/incubator-wayang/tree/9882b860ce1cda66382e9c1fa91e4e657397a233/python
> >
> > But i encountered an error when trying to run
> >
> > python3 -m pip install dist/pywy-1.0.0.tar.gz
> >
> > Do you think this could be related to not being able to find the modules
> > that i try to import in python?
> > ________________________________
> > From: Aurélien Bertrand <aurelien9.bertr...@gmail.com>
> > Sent: Wednesday, March 26, 2025 1:00 PM
> > To: dev@wayang.apache.org <dev@wayang.apache.org>
> > Subject: Re: Wayang REST api
> >
> > [You don't often get email from aurelien9.bertr...@gmail.com. Learn why
> > this is important at https://aka.ms/LearnAboutSenderIdentification ]
> >
> > Hi Christoffer,
> >
> > You can try to run the following once you have the Python package set up
> (I
> > recommend creating a conda env specifically for this, and running the
> file
> > outside the Wayang project):
> >
> > from pywy.dataquanta import WayangContextfrom pywy.platforms.java
> > import JavaPlugin
> > def word_count():
> >     ctx = WayangContext() \
> >         .register({JavaPlugin}) \
> >         .textfile("file://path_to_some_input_text_file.txt") \
> >         .store_textfile("file://path_to_where_you_want_to_store.txt")
> > if __name__ == "__main__":
> >     word_count
> >
> >
> > Then you should see in your terminal the JSON plan printed. Of course,
> you
> > can make it more complex by using other operators 😉
> >
> > Best regards,
> > Aurélien
> >
> > On Wed, 26 Mar 2025 at 12:36, Christoffer Emil Kristensen
> > <c...@itu.dk.invalid> wrote:
> >
> > > Hello Juri,
> > >
> > > We are trying to setup python by the following guide:
> > >
> >
> https://github.com/apache/incubator-wayang/tree/9882b860ce1cda66382e9c1fa91e4e657397a233/python
> > >
> > > But both me and @Jeppe Nordvi Halvorsen <h...@itu.dk> get this error
> > when
> > > running:
> > >
> > > python3 -m pip install dist/pywy-1.0.0.tar.gz
> > >
> > >
> > > Do you know if there are any prerequisites to start using the python
> api?
> > >
> > > Also, if you or anyone else have an example of a working wayang plan in
> > > json format that you would be willing to send it would be appreciated.
> > >
> > >
> > > ------------------------------
> > > *From:* Christoffer Emil Kristensen <c...@itu.dk.INVALID>
> > > *Sent:* Wednesday, March 26, 2025 12:14 PM
> > > *To:* dev@wayang.apache.org <dev@wayang.apache.org>
> > > *Subject:* Re: Wayang REST api
> > >
> > > [You don't often get email from c...@itu.dk.invalid. Learn why this is
> > > important at https://aka.ms/LearnAboutSenderIdentification ]
> > >
> > > Hello Juri,
> > >
> > > Yes i am aware that the filepath is set to mike//something, but i would
> > > assume that it would fail with something similar to "file not found"
> and
> > > not a serialization or null pointer error. So, it was just to test that
> > if
> > > it would actually work with the wayang plan and hit the REST endpoint
> and
> > > start executing a wayang plan.
> > >
> > > I will look into the python api and see if I can get it running.
> > >
> > > Thank you for your reply!
> > >
> > > Best regards,
> > >
> > > Christoffer Kristensen
> > > ________________________________
> > > From: Juri Petersen <j...@itu.dk.INVALID>
> > > Sent: Tuesday, March 25, 2025 9:06 AM
> > > To: dev@wayang.apache.org <dev@wayang.apache.org>
> > > Subject: Re: Wayang REST api
> > >
> > > [You don't often get email from j...@itu.dk.invalid. Learn why this is
> > > important at https://aka.ms/LearnAboutSenderIdentification ]
> > >
> > > Hi Christoffer,
> > > What you are observing is not really a bug, but an old example of a
> > > test-plan that we should remove.
> > > If you look at the plans contents, you can see that some data is
> > hardcoded
> > > to be on a system with a mike user, and I am pretty sure this will
> never
> > be
> > > true for your setup ??
> > >
> > > I am not sure if any of the example plans in the resources folder there
> > > are up-to-date and work.
> > > It is probably easiest to run one of our python-api examples and just
> put
> > > a print statement for the json-payload on the python side of things.
> > > Looking at this code, if you execute any of the python examples, a
> > > json-body should be printed:
> > >
> > >
> > >
> >
> https://github.com/apache/incubator-wayang/blob/9882b860ce1cda66382e9c1fa91e4e657397a233/python/src/pywy/core/core.py#L139
> > >
> > > I hope this helps, if not let me know.
> > >
> > > Best,
> > > Juri
> > > ________________________________
> > > From: Alexander Alten <a...@scalytics.io>
> > > Sent: 24 March 2025 17:26
> > > To: dev@wayang.apache.org <dev@wayang.apache.org>
> > > Subject: Re: Wayang REST api
> > >
> > > Hi Christopher,
> > >
> > > That looks like a bug, would you please open a report for it?
> > >
> > > Thank you,
> > >  —Alex
> > >
> > > > On Mar 23, 2025, at 21:52, Christoffer Emil Kristensen
> > > <c...@itu.dk.invalid> wrote:
> > > >
> > > > Hello everyone,
> > > >
> > > > We are two students from the IT-University at Copenhagen working on
> > > creating a web interface for Apache Wayang as part of our master
> thesis.
> > > >
> > > > We are currently working with the REST api to execute a wayang plan.
> I
> > > have a few questions though.
> > > >
> > > > When i try to run the plan which is an example in the repo:
> > >
> >
> https://github.com/apache/incubator-wayang/blob/main/wayang-api/wayang-api-json/src/test/resources/test-plan-a.json
> > > <
> > >
> >
> https://www.google.com/url?q=https://github.com/apache/incubator-wayang/blob/main/wayang-api/wayang-api-json/src/test/resources/test-plan-a.json&source=gmail-imap&ust=1743367966000000&usg=AOvVaw1SR8clzuiWewqIRRClZGwr
> > > >
> > > >
> > > > I get the following error:
> > > >
> > > >
> > > >
> > > >
> > > > I submit the pla through postman at the following url:
> > > http://localhost:8080/wayang-api-json/submit-plan/json <
> > >
> >
> https://www.google.com/url?q=http://localhost:8080/wayang-api-json/submit-plan/json&source=gmail-imap&ust=1743367966000000&usg=AOvVaw0cpYF3QFzZlBJcWdHIwXsK
> > > >
> > > >
> > > > With the JSON test-plan-a. And my header only contain Content-Type
> > > application/json
> > > >
> > > > If i for example, try to run another example without the context
> > > specified in the wayang plan i get a deserialization error. Does anyone
> > > have any documentation on how to use the API and if i am missing
> > something.
> > > >
> > > > Btw i would assume that running the plan gave me an error as i might
> > not
> > > have access to the specified filepath, but i would assume that if this
> > was
> > > the problem i would receive another error.
> > > >
> > > > This is the entire error:
> > > > java.lang.NullPointerException
> > > >         at
> > >
> >
> org.apache.wayang.api.json.builder.JsonPlanBuilder.setConfiguration(JsonPlanBuilder.scala:107)
> > > >         at
> > >
> >
> org.apache.wayang.api.json.builder.JsonPlanBuilder.fromPlan(JsonPlanBuilder.scala:82)
> > > >         at
> > > org.apache.wayang.api.json.Main$.$anonfun$jsonRoute$7(Main.scala:57)
> > > >         at
> > >
> >
> zio.ZIOCompanionVersionSpecific.$anonfun$attempt$1(ZIOCompanionVersionSpecific.scala:100)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:904)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1024)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1024)
> > > >         at
> > > zio.internal.FiberRuntime.evaluateEffect(FiberRuntime.scala:381)
> > > >         at zio.internal.FiberRuntime.start(FiberRuntime.scala:1339)
> > > >         at zio.Runtime$UnsafeAPIV1.runOrFork(Runtime.scala:160)
> > > >         at zio.http.netty.NettyRuntime.run(NettyRuntime.scala:52)
> > > >         at zio.http.netty.NettyRuntime.run$(NettyRuntime.scala:29)
> > > >         at
> > > zio.http.netty.NettyRuntime$$anon$1.run(NettyRuntime.scala:105)
> > > >         at
> > >
> >
> zio.http.netty.server.ServerInboundHandler.writeResponse(ServerInboundHandler.scala:300)
> > > >         at
> > >
> >
> zio.http.netty.server.ServerInboundHandler.channelRead0(ServerInboundHandler.scala:96)
> > > >         at
> > >
> >
> zio.http.netty.server.ServerInboundHandler.channelRead0(ServerInboundHandler.scala:42)
> > > >         at
> > >
> >
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.handler.flush.FlushConsolidationHandler.channelRead(FlushConsolidationHandler.java:152)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
> > > >         at
> > >
> >
> io.netty.handler.codec.http.HttpServerKeepAliveHandler.channelRead(HttpServerKeepAliveHandler.java:64)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
> > > >         at
> > >
> >
> io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
> > > >         at
> > >
> >
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
> > > >         at
> > >
> >
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
> > > >         at
> > >
> >
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
> > > >         at
> > >
> >
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
> > > >         at
> io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
> > > >         at
> > >
> >
> io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
> > > >         at
> > >
> io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
> > > >         at
> > >
> >
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> > > >         at java.base/java.lang.Thread.run(Thread.java:829)
> > > >
> > > >
> > > > And when running without the context, as per the following example:
> > >
> >
> https://github.com/apache/incubator-wayang/blob/main/wayang-api/wayang-api-json/src/test/resources/test-plan-a.json
> > > <
> > >
> >
> https://www.google.com/url?q=https://github.com/apache/incubator-wayang/blob/main/wayang-api/wayang-api-json/src/test/resources/test-plan-a.json&source=gmail-imap&ust=1743367966000000&usg=AOvVaw1SR8clzuiWewqIRRClZGwr
> > > >
> > > >
> > > > I get the error:
> > > >
> > > > com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot
> > > deserialize value of type
> > > `org.apache.wayang.api.json.operatorfromjson.PlanFromJson` from Array
> > value
> > > (token `JsonToken.START_ARRAY`)
> > > >  at [Source: (String)"[
> > > >   {
> > > >     "id": 1,
> > > >     "cat": "input",
> > > >     "input": [],
> > > >     "output": [2],
> > > >     "operatorName": "textFileInput",
> > > >     "data": {
> > > >       "filename": "file:///home/mike/json-api-examples/in1.txt"
> > > >     }
> > > >   },
> > > >   {
> > > >     "id": 2,
> > > >     "cat": "unary",
> > > >     "input": [1],
> > > >     "output": [3],
> > > >     "operatorName": "map",
> > > >     "data": {
> > > >       "udf": "(s: String) => s.toInt"
> > > >     }
> > > >   },
> > > >   {
> > > >     "cat": "composed",
> > > >     "operatorName": "composed",
> > > >     "operators": [
> > > >       {
> > > >         "id": 3,
> > > >         "cat": "unary",
> > > >         "[truncated 716 chars]; line: 1, column: 1]
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1473)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeFromArray(BeanDeserializer.java:656)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:211)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4825)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3772)
> > > >         at
> > >
> >
> com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3755)
> > > >         at
> > >
> >
> org.apache.wayang.api.json.parserutil.ParsePlanFromJson$.parsePlanFromString(ParsePlanFromJson.scala:38)
> > > >         at
> > > org.apache.wayang.api.json.Main$.$anonfun$jsonRoute$5(Main.scala:56)
> > > >         at scala.util.Try$.apply(Try.scala:213)
> > > >         at
> > > org.apache.wayang.api.json.Main$.$anonfun$jsonRoute$4(Main.scala:56)
> > > >         at
> > >
> >
> zio.ZIOCompanionVersionSpecific.$anonfun$attempt$1(ZIOCompanionVersionSpecific.scala:100)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:904)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:890)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1024)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:967)
> > > >         at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1024)
> > > >         at
> > > zio.internal.FiberRuntime.evaluateEffect(FiberRuntime.scala:381)
> > > >         at zio.internal.FiberRuntime.start(FiberRuntime.scala:1339)
> > > >         at zio.Runtime$UnsafeAPIV1.runOrFork(Runtime.scala:160)
> > > >         at zio.http.netty.NettyRuntime.run(NettyRuntime.scala:52)
> > > >         at zio.http.netty.NettyRuntime.run$(NettyRuntime.scala:29)
> > > >         at
> > > zio.http.netty.NettyRuntime$$anon$1.run(NettyRuntime.scala:105)
> > > >         at
> > >
> >
> zio.http.netty.server.ServerInboundHandler.writeResponse(ServerInboundHandler.scala:300)
> > > >         at
> > >
> >
> zio.http.netty.server.ServerInboundHandler.channelRead0(ServerInboundHandler.scala:96)
> > > >         at
> > >
> >
> zio.http.netty.server.ServerInboundHandler.channelRead0(ServerInboundHandler.scala:42)
> > > >         at
> > >
> >
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.handler.flush.FlushConsolidationHandler.channelRead(FlushConsolidationHandler.java:152)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
> > > >         at
> > >
> >
> io.netty.handler.codec.http.HttpServerKeepAliveHandler.channelRead(HttpServerKeepAliveHandler.java:64)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
> > > >         at
> > >
> >
> io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
> > > >         at
> > >
> >
> io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
> > > >         at
> > >
> >
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
> > > >         at
> > >
> >
> io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
> > > >         at
> > >
> >
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
> > > >         at
> > >
> >
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
> > > >         at
> > >
> >
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
> > > >         at
> > >
> >
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
> > > >         at
> io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
> > > >         at
> > >
> >
> io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
> > > >         at
> > >
> io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
> > > >         at
> > >
> >
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> > > >         at java.base/java.lang.Thread.run(Thread.java:829)
> > > > org.apache.wayang.api.json.exception.WayangApiJsonException: Can't
> > parse
> > > json plan.
> > > >
> > > >
> > > >
> > > > Best regards,
> > > >
> > > > Christoffer Kristensen
> > >
> > >
> > > --
> > > *Scalytics Connect*
> > > The foundation for secure, scalable, and transparent
> > > AI.
> > >
> > >
> > >
> > > --
> > > 3401 N. MIAMI AVE. STE 230
> > > 33127 Miami, Florida
> > > United States
> > > www.scalytics.io<http://www.scalytics.io> <http://www.scalytics.io>
> > >
> > > --  Please consider the
> > > environment before printing this email --
> > >
> > > Disclaimer:
> > > The content of this
> > > message is confidential. If you have received it by mistake, please
> > inform
> > > us by an email reply and then delete the message. It is forbidden to
> > copy,
> > > forward, or in any way reveal the contents of this message to anyone.
> The
> > > integrity and security of this email cannot be guaranteed over the
> > > Internet. Therefore, the sender will not be held liable for any damage
> > > caused by the message.
> > >
> >
>

Reply via email to