JSON4Jersey
From APIDesign
(New page: The [http://bck2brwsr.apidesign.org/javadoc/net.java.html.json net.java.html.json] has been primarily designed to run in a browser. However almost every application in a bro...) |
(→Jersey Media HTML JSON) |
||
(10 intermediate revisions not shown.) | |||
Line 1: | Line 1: | ||
- | The [http://bck2brwsr.apidesign.org/javadoc/net.java.html.json net.java.html.json] has been primarily designed to run in a [[JSON4Brwsr|browser]]. However almost every application in a browser tries to communicate with some server. The application logic is then split into two distinct systems - yet certain parts of the code need to run on both sides (think about validation - prevalidate on client, re-validate on server, before database is modified). Can we use the same code in browser as well as on server? | + | The [http://bck2brwsr.apidesign.org/javadoc/net.java.html.json/ net.java.html.json] has been primarily designed to run in a [[JSON4Brwsr|browser]]. However almost every application in a browser tries to communicate with some server. The application logic is then split into two distinct systems - yet certain parts of the code need to run on both sides (think about validation - prevalidate on client, re-validate on server, before database is modified). Can we use the same code in browser as well as on server? |
- | == [[Jersey]] Media [[JSON4Brwsr HTML JSON]] == | + | == [[Jersey]] Media [[JSON4Brwsr|HTML JSON]] == |
- | A new module has been donated to [[Jersey]] version 2.1. Just include it on your own application path as | + | A new module has been donated to [[Jersey]] version 2.1. Just include it on your server own application path as |
<source lang="xml"> | <source lang="xml"> | ||
Line 9: | Line 9: | ||
<groupId>org.glassfish.jersey.media</groupId> | <groupId>org.glassfish.jersey.media</groupId> | ||
<artifactId>html-json</artifactId> | <artifactId>html-json</artifactId> | ||
- | <version>2. | + | <version>2.6</version> |
<scope>runtime</scope> | <scope>runtime</scope> | ||
</dependency> | </dependency> | ||
Line 18: | Line 18: | ||
<source lang="bash"> | <source lang="bash"> | ||
$ hg clone https://hg.java.net/hg/html~demo | $ hg clone https://hg.java.net/hg/html~demo | ||
- | $ cd html~demo/ | + | $ cd html~demo/chat/server/ |
$ mvn process-classes exec:java | $ mvn process-classes exec:java | ||
</source> | </source> | ||
- | The ([[Jersey]] and [[ | + | The ([[Jersey]] and [[Grizzly]] based) server starts on port 8080. Just open your [[Chrome]] browser (there are some problems with [[Firefox]] and my use of '''XHR''''s ''POST'' method) and point it to ''http://localhost:8080''. In a few seconds, you should see a chat application running via the [[Bck2Brwsr]] [[VM]]. The message is represented by a [https://hg.java.net/hg/html~demo/file/65cadba2cf02/chat/model/src/main/java/org/apidesign/html/chatserver/model/MessageImpl.java Message] class and this class is the same on the server as well as in the browser. It is transmitted in a [[JSON]] format, but it can also contain additional (for example validation or presentation) logic. |
- | Your code can now run on a server as well as get [[Bck2Brwsr]]! | + | Your [[Java]] code can now run on a server as well as get [[Bck2Brwsr]]! |
+ | |||
+ | |||
+ | [[Category:OpenSourceContribution]] |
Current revision
The net.java.html.json has been primarily designed to run in a browser. However almost every application in a browser tries to communicate with some server. The application logic is then split into two distinct systems - yet certain parts of the code need to run on both sides (think about validation - prevalidate on client, re-validate on server, before database is modified). Can we use the same code in browser as well as on server?
Jersey Media HTML JSON
A new module has been donated to Jersey version 2.1. Just include it on your server own application path as
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>html-json</artifactId> <version>2.6</version> <scope>runtime</scope> </dependency>
and you can use classes generated by JSON4Brwsr's @Model annotation as Jersey entities. Here is a little demo for you to try:
$ hg clone https://hg.java.net/hg/html~demo $ cd html~demo/chat/server/ $ mvn process-classes exec:java
The (Jersey and Grizzly based) server starts on port 8080. Just open your Chrome browser (there are some problems with Firefox and my use of XHR's POST method) and point it to http://localhost:8080. In a few seconds, you should see a chat application running via the Bck2Brwsr VM. The message is represented by a Message class and this class is the same on the server as well as in the browser. It is transmitted in a JSON format, but it can also contain additional (for example validation or presentation) logic.
Your Java code can now run on a server as well as get Bck2Brwsr!