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