Tapestry to natively emit JSON?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Tapestry to natively emit JSON?

Qbyte Consulting
Hi,

Would it be feasible or indeed sensible(?) to convert/adapt Tapestry to
render JSON?

Page classes would provide API endpoints and unpack params and body content
to properties and the templates would have JSON instead of TML. I'd also
want to modify the tapestry tags (t:if t:loop etc) to something much more
simple and JSONesque.

The page classes would support the GET/POST/PUT and so forth by convention.
I also envisage being able to filter, resort and augment responses through
an execution chain.

i.e: a JSON template

{
    "id": $,
    ?"name": $,
    <prices id='$' orderBy='ASC'>,
    "tags": [$]}


$ would call corresponding getter methods e.g. getId, getTags etc..
? would invoke hasName and render the name value if true
<> would embed components - <prices...> could render "prices" : [1,2,3],

I'd like to harness Tapesty to emit JSON from rendering char streams
instead of having to use concrete domain classes that have to be reflected
and such as per JAXB and other similar frameworks that seem to make a meal
of JSON. I'd like plastic to convert the template into stream emitter
methods that are called transparently in the plastic classes. Hiding the
boilerplate code

I like the idea of writing the JSON template myself, it's clearer more
flexible and can stream and follows the ethos of Tapestry. Reflection must
slow the rendering down a lot.

Is this crazy, any thoughts? I want to have flexibility and write minimum
code, and max reuse things Tapestry is good with.

John
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Tapestry to natively emit JSON?

Thiago H de Paula Figueiredo
Hi!

I don't think adapting Tapestry's template engine to support templating
JSON is a good idea. It was built to output HTML and XML and nothing else.
Is there anything else that does what you want? Why not using a generic
template engine like FreeMarker or, better yet, use some Java JSON mapper
like Jackson? I do see the point of implementing some Java class to
Tapestry JSON object mapper, but as a template, I see none, I'm sorry. If
you want to implement it, go ahead. :)

Regarding reflection, the Tapestry BeanModel classes, which are now in a
separate JAR and can be used without tapestry-core, are very fast and does
caching of everything got by reflection, so they're a solid foundation for
doing what you want.

On the other hand, supporting PUT and DELETE HTTP methods in Tapestry pages
is something I had some thoughts over time.


On Tue, Apr 18, 2017 at 12:11 PM, Qbyte Consulting <
[hidden email]> wrote:

> Hi,
>
> Would it be feasible or indeed sensible(?) to convert/adapt Tapestry to
> render JSON?
>
> Page classes would provide API endpoints and unpack params and body content
> to properties and the templates would have JSON instead of TML. I'd also
> want to modify the tapestry tags (t:if t:loop etc) to something much more
> simple and JSONesque.
>
> The page classes would support the GET/POST/PUT and so forth by convention.
> I also envisage being able to filter, resort and augment responses through
> an execution chain.
>
> i.e: a JSON template
>
> {
>     "id": $,
>     ?"name": $,
>     <prices id='$' orderBy='ASC'>,
>     "tags": [$]}
>
>
> $ would call corresponding getter methods e.g. getId, getTags etc..
> ? would invoke hasName and render the name value if true
> <> would embed components - <prices...> could render "prices" : [1,2,3],
>
> I'd like to harness Tapesty to emit JSON from rendering char streams
> instead of having to use concrete domain classes that have to be reflected
> and such as per JAXB and other similar frameworks that seem to make a meal
> of JSON. I'd like plastic to convert the template into stream emitter
> methods that are called transparently in the plastic classes. Hiding the
> boilerplate code
>
> I like the idea of writing the JSON template myself, it's clearer more
> flexible and can stream and follows the ethos of Tapestry. Reflection must
> slow the rendering down a lot.
>
> Is this crazy, any thoughts? I want to have flexibility and write minimum
> code, and max reuse things Tapestry is good with.
>
> John
>



--
Thiago
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Tapestry to natively emit JSON?

Qbyte Consulting
Hi,

Thanks for the feedback.

Which tapestry class is responsible for parsing the templates and
augmenting the page classes to perform rendering?

J

On Wed, Apr 19, 2017 at 3:18 AM, Thiago H. de Paula Figueiredo <
[hidden email]> wrote:

> Hi!
>
> I don't think adapting Tapestry's template engine to support templating
> JSON is a good idea. It was built to output HTML and XML and nothing else.
> Is there anything else that does what you want? Why not using a generic
> template engine like FreeMarker or, better yet, use some Java JSON mapper
> like Jackson? I do see the point of implementing some Java class to
> Tapestry JSON object mapper, but as a template, I see none, I'm sorry. If
> you want to implement it, go ahead. :)
>
> Regarding reflection, the Tapestry BeanModel classes, which are now in a
> separate JAR and can be used without tapestry-core, are very fast and does
> caching of everything got by reflection, so they're a solid foundation for
> doing what you want.
>
> On the other hand, supporting PUT and DELETE HTTP methods in Tapestry pages
> is something I had some thoughts over time.
>
>
> On Tue, Apr 18, 2017 at 12:11 PM, Qbyte Consulting <
> [hidden email]> wrote:
>
> > Hi,
> >
> > Would it be feasible or indeed sensible(?) to convert/adapt Tapestry to
> > render JSON?
> >
> > Page classes would provide API endpoints and unpack params and body
> content
> > to properties and the templates would have JSON instead of TML. I'd also
> > want to modify the tapestry tags (t:if t:loop etc) to something much more
> > simple and JSONesque.
> >
> > The page classes would support the GET/POST/PUT and so forth by
> convention.
> > I also envisage being able to filter, resort and augment responses
> through
> > an execution chain.
> >
> > i.e: a JSON template
> >
> > {
> >     "id": $,
> >     ?"name": $,
> >     <prices id='$' orderBy='ASC'>,
> >     "tags": [$]}
> >
> >
> > $ would call corresponding getter methods e.g. getId, getTags etc..
> > ? would invoke hasName and render the name value if true
> > <> would embed components - <prices...> could render "prices" : [1,2,3],
> >
> > I'd like to harness Tapesty to emit JSON from rendering char streams
> > instead of having to use concrete domain classes that have to be
> reflected
> > and such as per JAXB and other similar frameworks that seem to make a
> meal
> > of JSON. I'd like plastic to convert the template into stream emitter
> > methods that are called transparently in the plastic classes. Hiding the
> > boilerplate code
> >
> > I like the idea of writing the JSON template myself, it's clearer more
> > flexible and can stream and follows the ethos of Tapestry. Reflection
> must
> > slow the rendering down a lot.
> >
> > Is this crazy, any thoughts? I want to have flexibility and write minimum
> > code, and max reuse things Tapestry is good with.
> >
> > John
> >
>
>
>
> --
> Thiago
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Tapestry to natively emit JSON?

Thiago H de Paula Figueiredo
On Mon, Apr 24, 2017 at 4:00 AM, Qbyte Consulting <[hidden email]
> wrote:

> Hi,
>

Hi!


> Thanks for the feedback.
>
> Which tapestry class is responsible for parsing the templates and
> augmenting the page classes to perform rendering?
>

TemplateParserImpl does the parsing, but then it parses XML, so it's not
applicable to your scenario at all, as you need to parse a completely new
language. Bytecode manipulation is done in PlasticClass instances.

You remember you can return JSONObject and JSONArray in onActivate() and
event handler methods, do you? I'm sorry, I still believe this project is
too much effort for too little benefit (unless you want to do it for fun,
and fun is a great reason to do something).


>
> J
>
> On Wed, Apr 19, 2017 at 3:18 AM, Thiago H. de Paula Figueiredo <
> [hidden email]> wrote:
>
> > Hi!
> >
> > I don't think adapting Tapestry's template engine to support templating
> > JSON is a good idea. It was built to output HTML and XML and nothing
> else.
> > Is there anything else that does what you want? Why not using a generic
> > template engine like FreeMarker or, better yet, use some Java JSON mapper
> > like Jackson? I do see the point of implementing some Java class to
> > Tapestry JSON object mapper, but as a template, I see none, I'm sorry. If
> > you want to implement it, go ahead. :)
> >
> > Regarding reflection, the Tapestry BeanModel classes, which are now in a
> > separate JAR and can be used without tapestry-core, are very fast and
> does
> > caching of everything got by reflection, so they're a solid foundation
> for
> > doing what you want.
> >
> > On the other hand, supporting PUT and DELETE HTTP methods in Tapestry
> pages
> > is something I had some thoughts over time.
> >
> >
> > On Tue, Apr 18, 2017 at 12:11 PM, Qbyte Consulting <
> > [hidden email]> wrote:
> >
> > > Hi,
> > >
> > > Would it be feasible or indeed sensible(?) to convert/adapt Tapestry to
> > > render JSON?
> > >
> > > Page classes would provide API endpoints and unpack params and body
> > content
> > > to properties and the templates would have JSON instead of TML. I'd
> also
> > > want to modify the tapestry tags (t:if t:loop etc) to something much
> more
> > > simple and JSONesque.
> > >
> > > The page classes would support the GET/POST/PUT and so forth by
> > convention.
> > > I also envisage being able to filter, resort and augment responses
> > through
> > > an execution chain.
> > >
> > > i.e: a JSON template
> > >
> > > {
> > >     "id": $,
> > >     ?"name": $,
> > >     <prices id='$' orderBy='ASC'>,
> > >     "tags": [$]}
> > >
> > >
> > > $ would call corresponding getter methods e.g. getId, getTags etc..
> > > ? would invoke hasName and render the name value if true
> > > <> would embed components - <prices...> could render "prices" :
> [1,2,3],
> > >
> > > I'd like to harness Tapesty to emit JSON from rendering char streams
> > > instead of having to use concrete domain classes that have to be
> > reflected
> > > and such as per JAXB and other similar frameworks that seem to make a
> > meal
> > > of JSON. I'd like plastic to convert the template into stream emitter
> > > methods that are called transparently in the plastic classes. Hiding
> the
> > > boilerplate code
> > >
> > > I like the idea of writing the JSON template myself, it's clearer more
> > > flexible and can stream and follows the ethos of Tapestry. Reflection
> > must
> > > slow the rendering down a lot.
> > >
> > > Is this crazy, any thoughts? I want to have flexibility and write
> minimum
> > > code, and max reuse things Tapestry is good with.
> > >
> > > John
> > >
> >
> >
> >
> > --
> > Thiago
> >
>



--
Thiago
Loading...