Uploaded image for project: 'PUBLIC - Liferay Portal Community Edition'
  1. PUBLIC - Liferay Portal Community Edition
  2. LPS-33194

Enhance JSONWebService Invoker: allow usage of inner properties

    Details

      Description

      Due to demand from the UI team, JSON WebService Invoker syntax will be enhanced to support manipulation of inner properties. The following requirements have to be implemented:

      add variable to inner object

      {"$p = /foo/get-foo-page" : {
          "$XXX1 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "galaxy"
          },
          "data.$XXX2 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "star"}
          }
      }}
      

      In this snippet we added variable XXX1 to the root variable p - this feature already existed. The new functionality is that now we can also add a variable to an inner property: data.XXX2, in the very same way how it is added to the root.

      This snippet should work with and without variable XXX1. Also, JSONWS Invoker should respect the @JSON serialization hints of the inner object (here: 'data').

      add variable to inner list, with constant value

      {"$p = /foo/get-foo-page" : {
          "$XXX1 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "galaxy"
          },
          "data.$XXX2 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "star"
          },
          "list.$XXX3 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "pulsar"
          }
      }}
      

      Variable XXX3 is added to the each element of the inner list. Assigned value is however a constant and equal for each element of the list.

      add variable to inner list, referencing list element value

      {"$p = /foo/get-foo-page" : {
          "$XXX1 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "galaxy"
          },
          "data.$XXX2 = /foo/hello-world" : {
              "@userId" : "$p.page",
              "worldName" : "star"
          },
          "list.$XXX3 = /foo/hello-world" : {
              "@userId" : "$p.list.id",
              "worldName" : "pulsar"
          }
      }}
      

      Everything is the same as above, except the value for userId - this time we populate it with id value of current list element.

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Packages

                  Version Package
                  6.2.0 CE M5