<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mariano Guerra's Log (Posts about jetty)</title><link>http://marianoguerra.org/</link><description></description><atom:link href="http://marianoguerra.org/categories/jetty.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Mon, 18 Nov 2024 17:56:34 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>lift 2.4-M4, scala 2.9.1, sbt 0.11.0-RC0, jetty 7.3 and xsbt-web-plugin 0.1.1</title><link>http://marianoguerra.org/posts/201109lift-24-m4-scala-291-sbt-0110-rc0-jetty/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;div class="document"&gt;&lt;div class="section" id="lift-2-4-m4-scala-2-9-1-sbt-0-11-0-rc0-jetty-7-3-and-xsbt-web-plugin-0-1-1"&gt;&lt;h1&gt;installing sbt 0.11.0-RC0&lt;/h1&gt;&lt;/div&gt;&lt;div class="section" id="installing-sbt-0-11-0-rc0"&gt;run the following commands:&lt;br&gt;&lt;pre class="literal-block"&gt;# go to your home directory&lt;br&gt;cd&lt;br&gt;&lt;br&gt;# create a bin folder there (if you don't have it yet)&lt;br&gt;mkdir bin&lt;br&gt;&lt;br&gt;# download the latest sbt&lt;br&gt;wget http://repo.typesafe.com/typesafe/ivy-snapshots/org.scala-tools.sbt/sbt-launch/0.11.0-RC1/sbt-launch.jar&lt;br&gt;&lt;/pre&gt;now we need to create a launcher for sbt, create a file called sbt in the bin directory you just created and put the following inside:&lt;br&gt;&lt;pre class="literal-block"&gt;java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"&lt;br&gt;&lt;/pre&gt;now run the following commands:&lt;br&gt;&lt;pre class="literal-block"&gt;# give execution permissions to the file&lt;br&gt;chmod u+x sbt&lt;br&gt;&lt;/pre&gt;if you don't have $HOME/bin in your path variable you should add it, for this do the following:&lt;br&gt;&lt;pre class="literal-block"&gt;# open $HOME/.bashrc in your favorite text editor&lt;br&gt;vim $HOME/.bashrc&lt;br&gt;&lt;/pre&gt;and add the following line at the end of it:&lt;br&gt;&lt;pre class="literal-block"&gt;export PATH=$PATH:$HOME/bin&lt;br&gt;&lt;/pre&gt;save and close and run the shell again so it loads the new definitions:&lt;br&gt;&lt;pre class="literal-block"&gt;bash&lt;br&gt;&lt;/pre&gt;you can check that the path was updated by running:&lt;br&gt;&lt;pre class="literal-block"&gt;echo $PATH&lt;br&gt;&lt;/pre&gt;you should see something similar to this:&lt;br&gt;&lt;pre class="literal-block"&gt;/sbin:/bin:/usr/sbin:/usr/bin:/home/test/bin&lt;br&gt;&lt;/pre&gt;see that the last one is $HOME/bin (with $HOME expanded to my current home location)&lt;/div&gt;&lt;div class="section" id="installing-scala-2-9-1"&gt;&lt;h1&gt;installing scala 2.9.1&lt;/h1&gt;if your operating system has this in the package manager then install it from there but since the release is new and some distributions are a little behing we will install it from the download section of the scala site.&lt;br&gt;run the following commands:&lt;br&gt;&lt;pre class="literal-block"&gt;# download the latest version of scala&lt;br&gt;wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1.final.tgz&lt;br&gt;&lt;br&gt;# unpack it&lt;br&gt;tar -xzf scala-2.9.1.final.tgz&lt;br&gt;&lt;br&gt;# move the folder to the standard place&lt;br&gt;sudo mv scala-2.9.1.final /usr/share/scala&lt;br&gt;&lt;br&gt;# create links so the commands are visible&lt;br&gt;sudo ln -s /usr/share/scala/bin/scala /usr/bin/scala&lt;br&gt;sudo ln -s /usr/share/scala/bin/scalac /usr/bin/scalac&lt;br&gt;sudo ln -s /usr/share/scala/bin/fsc /usr/bin/fsc&lt;br&gt;sudo ln -s /usr/share/scala/bin/sbaz /usr/bin/sbaz&lt;br&gt;sudo ln -s /usr/share/scala/bin/sbaz-setup /usr/bin/sbaz-setup&lt;br&gt;sudo ln -s /usr/share/scala/bin/scaladoc /usr/bin/scaladoc&lt;br&gt;sudo ln -s /usr/share/scala/bin/scalap /usr/bin/scalap&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" id="installing-the-rest"&gt;&lt;h1&gt;installing the rest&lt;/h1&gt;first create the project folder and setup the structure:&lt;br&gt;&lt;pre class="literal-block"&gt;# define the name of the project&lt;br&gt;PROJNAME=demo&lt;br&gt;&lt;br&gt;# create the direcotry where our project will be&lt;br&gt;mkdir $PROJNAME&lt;br&gt;&lt;br&gt;# get the latest lift with sbt support&lt;br&gt;wget https://nodeload.github.com/lift/lift_24_sbt/tarball/master&lt;br&gt;&lt;br&gt;# extract lift&lt;br&gt;tar -xzf master&lt;br&gt;&lt;br&gt;# remove the downloaded file&lt;br&gt;rm master&lt;br&gt;&lt;br&gt;# copy the basic example to our project directory&lt;br&gt;cp -r lift-lift_24_sbt-*/scala_29/lift_basic/* $PROJNAME&lt;br&gt;&lt;br&gt;# move to our project folder&lt;br&gt;cd $PROJNAME&lt;br&gt;&lt;br&gt;# remove older sbt versions&lt;br&gt;rm sbt sbt.bat sbt-launcher.jar&lt;br&gt;&lt;br&gt;# remove the project structure&lt;br&gt;rm -r project/&lt;br&gt;&lt;br&gt;# create the new project structure&lt;br&gt;mkdir -p project/project&lt;br&gt;&lt;/pre&gt;the change in the project directory structure is because it changed in sbt 0.11, see more about this here:&lt;br&gt;&lt;a class="reference external" href="https://groups.google.com/forum/#%21searchin/simple-build-tool/plugins/simple-build-tool/ep_63fA_Gzk/32xiPzGkCqAJ"&gt;https://groups.google.com/forum/#!searchin/simple-build-tool/plugins/simple-build-tool/ep_63fA_Gzk/32xiPzGkCqAJ&lt;/a&gt;&lt;br&gt;create a file at $PROJNAME/build.sbt:&lt;br&gt;&lt;pre class="literal-block"&gt;vim build.sbt&lt;br&gt;&lt;/pre&gt;with the following content:&lt;br&gt;&lt;pre class="literal-block"&gt;seq(webSettings :_*)&lt;br&gt;&lt;br&gt;scalaVersion := "2.9.1"&lt;br&gt;&lt;br&gt;libraryDependencies ++= Seq(&lt;br&gt;        "net.liftweb" %% "lift-webkit" % "2.4-M4" % "compile",&lt;br&gt;        "net.liftweb" %% "lift-mapper" % "2.4-M4" % "compile",&lt;br&gt;        "org.eclipse.jetty" % "jetty-webapp" % "7.5.1.v20110908" % "jetty",&lt;br&gt;        "junit" % "junit" % "4.8" % "test",&lt;br&gt;        "ch.qos.logback" % "logback-classic" % "0.9.26",&lt;br&gt;        "org.scala-tools.testing" %% "specs" % "1.6.9" % "test",&lt;br&gt;        "com.h2database" % "h2" % "1.3.160"&lt;br&gt;)&lt;br&gt;&lt;/pre&gt;create a file at $PROJNAME/project/plugins.sbt:&lt;br&gt;&lt;pre class="literal-block"&gt;vim project/plugins.sbt&lt;br&gt;&lt;/pre&gt;with the following content:&lt;br&gt;&lt;pre class="literal-block"&gt;resolvers ++= Seq(&lt;br&gt;        "Web plugin repo" at "http://siasia.github.com/maven2",&lt;br&gt;        Resolver.url("Typesafe repository", new java.net.URL("http://typesafe.artifactoryonline.com/typesafe/ivy-releases/"))(Resolver.defaultIvyPatterns)&lt;br&gt;)&lt;br&gt;&lt;br&gt;addSbtPlugin("com.github.siasia" % "xsbt-web-plugin" % "0.1.1")&lt;br&gt;&lt;/pre&gt;now run:&lt;br&gt;&lt;pre class="literal-block"&gt;sbt&lt;br&gt;&lt;/pre&gt;when you get to the console write:&lt;br&gt;&lt;pre class="literal-block"&gt;jetty-run&lt;br&gt;&lt;/pre&gt;note that the first time it will take a while, that's because it's downloading lot of stuff and compiling some other things, after the first run everything becomes faster.&lt;br&gt;after a moment some information will appear, after that navigate to:&lt;br&gt;&lt;pre class="literal-block"&gt;http://localhost:8080&lt;br&gt;&lt;/pre&gt;and play with the app.&lt;/div&gt;&lt;div class="section" id="generating-a-war-file-to-deploy-in-web-containers"&gt;&lt;h1&gt;generating a war file to deploy in web containers&lt;/h1&gt;just run:&lt;br&gt;&lt;pre class="literal-block"&gt;sbt package-war&lt;br&gt;&lt;/pre&gt;to test you can run:&lt;br&gt;&lt;pre class="literal-block"&gt;sbt test&lt;br&gt;&lt;/pre&gt;note that the new version of jetty changed namespace from org.mortbay.* to org.eclipse.* so some code may be broken.&lt;/div&gt;&lt;div class="section" id="some-extra-packages"&gt;&lt;h1&gt;some extra packages&lt;/h1&gt;here are some other packages you may want to have, copy the lines your are interested in and add them to $PROJNAME/build.sbt:&lt;br&gt;&lt;pre class="literal-block"&gt;libraryDependencies ++= Seq(&lt;br&gt;    "com.novocode" % "junit-interface" % "0.6" % "test-&amp;gt;default",&lt;br&gt;    "org.scalatest" % "scalatest_2.9.0" % "1.6.1",&lt;br&gt;    "com.sun.jersey" % "jersey-server" % "1.9",&lt;br&gt;    "com.sun.jersey" % "jersey-client" % "1.9",&lt;br&gt;    "com.sun.jersey" % "jersey-core" % "1.9",&lt;br&gt;    "com.sun.jersey" % "jersey-json" % "1.9",&lt;br&gt;    "javax.ws.rs" % "jsr311-api" % "1.1.1",&lt;br&gt;    "javax.xml.bind" % "jaxb-api" % "2.2"&lt;br&gt;)&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description><category>jetty</category><category>lift</category><category>sbt</category><category>scala</category><category>xsbt-web-plugin</category><guid>http://marianoguerra.org/posts/201109lift-24-m4-scala-291-sbt-0110-rc0-jetty/</guid><pubDate>Fri, 23 Sep 2011 09:50:00 GMT</pubDate></item><item><title>Como consumuir Webservice REST JSON en Javascript</title><link>http://marianoguerra.org/posts/200903como-consumuir-webservice-rest-json-en/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;p&gt;este post es continuación de este: &lt;a href="http://marianoguerra.blogspot.com/2009/03/serializardesserializar-objetos-java.html"&gt;http://marianoguerra.blogspot.com/2009/03/serializardesserializar-objetos-java.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;ahora vamos a hacer un modulo en javascript para usar la API REST JSON desde una pagina web (lo que normalmente se llama Web 2.0 o AJAX solo que la X de XML la cambiamos por la J de JSON asi que queda AJAJ).&lt;br&gt;&lt;br&gt;el primer problema que debemos superar es la regla de "&lt;a href="https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript"&gt;same origin&lt;/a&gt;" de javascript por la cual solo podemos hacer requests asincronicos con HttpRequest solo a la misma URL de la cual se descargo el script, y como nuestra aplicación se va a distribuir en un jar, nuestro js y html tiene que estar en ese jar y lo tiene que servir la misma aplicación, lo que significa que si le pido 0.0.0.0:9999/pagina.html la aplicación tiene que buscar en el jar el archivo en algun lugar y devolverlo. Si el archivo viene de otro lado nuestro request va a fallar.&lt;br&gt;&lt;br&gt;Para solucionar esto la unica forma que encontre fue escribir un handler a mano para devolver archivos estaticos.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.MalformedURLException&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.handler.ResourceHandler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.resource.Resource&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ContentHandler&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;ResourceHandler&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Resource&lt;/span&gt; &lt;span class="nf"&gt;getResource&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="n"&gt;MalformedURLException&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getResourceBase&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;replaceAll&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"file:"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newResource&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getClass&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getResource&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getResourceBase&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;replaceAll&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"file:"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;el archivo Main.java se modifica para agregar este handler a la lista de handlers, quedaria asi:&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.sun.jersey.spi.container.servlet.ServletContainer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.Handler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.handler.DefaultHandler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.handler.HandlerList&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.servlet.Context&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.servlet.ServletHolder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;     * @param args the command line arguments&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;     */&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mortbay&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;jetty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;ServletHolder&lt;/span&gt; &lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;Context&lt;/span&gt; &lt;span class="n"&gt;contextWS&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;holder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ServletHolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ServletContainer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setInitParameter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"com.sun.jersey.config.property.packages"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class="s"&gt;"addressbook.ws"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mortbay&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;jetty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9999&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;contextWS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/ws"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SESSIONS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;contextWS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addServlet&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/*"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;ContentHandler&lt;/span&gt; &lt;span class="n"&gt;resource_handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ContentHandler&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;resource_handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setResourceBase&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/resources"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;HandlerList&lt;/span&gt; &lt;span class="n"&gt;handlers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HandlerList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;handlers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHandlers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Handler&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;resource_handler&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;contextWS&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultHandler&lt;/span&gt;&lt;span class="o"&gt;()});&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handlers&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ws&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;ahora creamos un paquete llamado resources en la base del proyecto en donde vamos a poner nuestros archivos estaticos.&lt;br&gt;&lt;br&gt;para poder hacer nuestra pagina über AJAX vamos a necesitar dos librerias, jquery y JSON.js, la primera nos ayuda en muchas cosas, siendo una de ellas la de hacer request HTTP que funcione en todos los browsers, la segunda nos sirve para serializar/deserializar objetos javascript.&lt;br&gt;&lt;br&gt;las urls son las siguientes:&lt;br&gt;&lt;br&gt;&lt;a href="http://jquery.com/"&gt;http://jquery.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://www.json.org/json2.js"&gt;http://www.json.org/json2.js&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;ponemos la libreria jquery-version.js y json2.js que descargamos en el paquete resources.js, creamos un archivo addressbook.js en el mismo paquete.&lt;br&gt;&lt;br&gt;tambien creamos un archivo addressbook.html en el paquete resources, osea que la estructura quedaria asi:&lt;br&gt;&lt;br&gt;&lt;br&gt;/resources&lt;br&gt;/resources/addressbook.html&lt;br&gt;/resources/js&lt;br&gt;/resources/js/addressbook.js&lt;br&gt;/resources/js/jquery-1.3.1.min.js&lt;br&gt;/resources/js/json2.js&lt;br&gt;&lt;br&gt;en addressbook.js vamos a crear los metodos de javascript que nos permitan interactuar con el servidor, asi como las clases que debemos enviar serializadas.&lt;br&gt;&lt;br&gt;ahora pongo el contenido de los archivos.&lt;br&gt;&lt;br&gt;resources/addressbook.html&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Address Book&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/css"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"css/style.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"js/jquery-1.3.1.min.js"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"js/json2.js"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"js/addressbook.js"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'object'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;criterion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/array/i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;criterion&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#search'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onSearchSucceed&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onSearchFailed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onSearchSucceed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;showResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;showResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.results'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"entry"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"entry"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;" "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;br/&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"entry"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"entry"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;" "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;br/&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onSearchFailed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"La busqueda fallo"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getAll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onGetAllSucceeded&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onGetAllFailed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onGetAllSucceeded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;showResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onGetAllFailed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"La busqueda fallo"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#firstName'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#lastName'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#address'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;workPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#workPhone'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;homePhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#homePhone'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;cellPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#cellPhone'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cellPhone&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onCreateSucceeded&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onCreateFailed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onCreateSucceeded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"entrada añadida con exito"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onCreateFailed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"error añadiendo entrada"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Address Book&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Nombre&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Apellido&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;direccion&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Telefono Trabajo&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"workPhone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Telefono Casa&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"homePhone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Telefono Celular&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"cellPhone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Crear"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"create();"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Search"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"search();"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Get All"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"getAll();"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;resources/js/addressbook.js&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;// AddressBook namespace&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;AddressBook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cellPhone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;homePhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;workPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cellPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;// serializa a JSON&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serialize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serialize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;// devuelve una funcion que hace un request REST a path, usando method, el&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;// metodo devuelto recibe como primer parametro una entidad que es enviada&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;// en el *cuerpo* del request, por ello este metodo es util para PUT y POST&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildCreateUpdate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ajax&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;contentType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serialize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;// devuelve una funcion que hace un request REST a path, usando method, el&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;// metodo devuelto recibe como primer un string que es agregado al path&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;// por ello este metodo es util para GET y DELETE&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildGetDelete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ajax&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildGetDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/ws/book/json/all"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildGetDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/ws/book/json/search"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"/"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success_cb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error_cb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;AddressBook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildCreateUpdate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PUT"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/ws/book/"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;tambien hice algunos cambios en addressbook.ws.AddressBook, aca esta la version actual&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ws&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;addressbook.model.AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.Consumes&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.GET&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.PUT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.Path&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.PathParam&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.Produces&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"book"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AddressBook&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;searchByFirstName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;searchByLastName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;getAddressBook&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;getAddressBook&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Esponja"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"321"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5551"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Gary"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Caracol"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 2"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"234"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"432"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5552"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Arenita"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Ardilla"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 3"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"345"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"543"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5553"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Patricio"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Estrella"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 4"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"456"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"654"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5554"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Calamardo"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Calamar"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 5"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"567"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"765"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5555"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"xml/all"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/xml"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;getAllXml&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"json/all"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;getAllJson&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"xml/search/{type}/{query}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/xml"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;searchXml&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"query"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"json/search/{type}/{query}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;searchJson&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"query"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@PUT&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Consumes&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"application/xml"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;con este ejemplo tenemos una aplicación que expone una API REST y un cliente en javascript/html que lo consume y utiliza, expandiendo la cantidad de entidades en la API podemos escalar a una aplicacion completa.&lt;br&gt;&lt;br&gt;Si ando con ganas en el proximo post voy a explicar como usar un ORM (object relational mapper) para almacenar el contenido de la entidad en una base de datos.&lt;br&gt;&lt;br&gt;el codigo completo de este ejemplo lo voy a colgar en github en esta direccion http://github.com/marianoguerra/examples/tree/master, ahora a aprender a usar git :)</description><category>java</category><category>javascript</category><category>jersey</category><category>jetty</category><category>jquery</category><category>json</category><category>rest</category><guid>http://marianoguerra.org/posts/200903como-consumuir-webservice-rest-json-en/</guid><pubDate>Wed, 25 Mar 2009 00:52:00 GMT</pubDate></item><item><title>Serializar/desserializar objetos java a/de XML/JSON</title><link>http://marianoguerra.org/posts/200903serializardesserializar-objetos-java/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;p&gt;este post es la segunda parte de este post: &lt;a href="http://marianoguerra.blogspot.com/2009/03/webservices-rest-en-java-con-jetty-y.html"&gt;http://marianoguerra.blogspot.com/2009/03/webservices-rest-en-java-con-jetty-y.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Para tener webservices REST como la gente necesitamos poder transformar nuestros objetos a una representacion que pueda ser entendida por muchos lenguajes y de vuelta de esa representacion a objetos java, para ello vamos a crear los objetos de nuetro modelo y los vamos  anotar para poder serializar/desserializar a XML y JSON, yo particularmente prefiero JSON porque es mas simple, legible y interactua muy bien con javascript, que suele ser el otro extremo de cualquier aplicacion web, pero no importa ya que de la forma que voy a mostrar nos permite hacer los dos por el precio de uno.&lt;br&gt;&lt;br&gt;Para ello creamos primero el paquete model dentro de nuestro proyecto, en mi caso addressbook.model y adentro creamos dos clases, AddressBook y AddressBookEntry&lt;br&gt;&lt;br&gt;para poder usar las anotaciones de serializacion agregamos los siguientes jars&lt;br&gt;&lt;br&gt;&lt;a href="http://download.java.net/maven/1/javax.xml.bind/jars/jaxb-api-2.1.jar"&gt;jaxb-api-2.1.jar&lt;/a&gt;&lt;br&gt;&lt;a href="http://download.java.net/maven/1/com.sun.xml.bind/jars/jaxb-impl-2.1.jar"&gt;jaxb-impl-2.1.jar&lt;/a&gt;&lt;br&gt;&lt;br&gt;para poder serializar a JSON agregamos el siguiente jar&lt;br&gt;&lt;br&gt;&lt;a href="http://repository.codehaus.org/org/codehaus/jettison/jettison/1.0.1/jettison-1.0.1.jar"&gt;jettison-1.0.1.jar&lt;/a&gt;&lt;br&gt;&lt;br&gt;para buscar versiones mas nuevas podes ir a &lt;a href="http://download.java.net/maven/1/javax.xml.bind/jars"&gt;http://download.java.net/maven/1/javax.xml.bind/jars&lt;/a&gt;/ y &lt;a href="http://repository.codehaus.org/org/codehaus/jettison/jettison/"&gt;http://repository.codehaus.org/org/codehaus/jettison/jettison/&lt;/a&gt; respectivamente.&lt;br&gt;&lt;br&gt;ahora creamos la clase AddressBookEntry que simplemente va a contener los siguientes atributos privados, todos strings:&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;firstName&lt;/li&gt;&lt;li&gt;lastName&lt;/li&gt;&lt;li&gt;address&lt;/li&gt;&lt;li&gt;homePhone&lt;/li&gt;&lt;li&gt;workPhone&lt;/li&gt;&lt;li&gt;cellPhone&lt;/li&gt;&lt;/ul&gt;creamos los getters/setters y dos constructores, uno sin argumentos que inicializa los valores por default y uno con todos los parametros.&lt;br&gt;&lt;br&gt;ahora llega la hora de decorar la clase para poder serializarla, el resultado es el siguiente:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.Serializable&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlAccessType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlAccessorType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlRootElement&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@XmlAccessorType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;XmlAccessType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FIELD&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@XmlRootElement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"addressBookEntity"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="n"&gt;Serializable&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;homePhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;workPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cellPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getLastName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setLastName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getAddress&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setAddress&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getCellPhone&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setCellPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cellPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cellPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getFirstName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setFirstName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getHomePhone&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setHomePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;homePhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;homePhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getWorkPhone&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setWorkPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;workPhone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;workPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;si se fijan hay dos anotaciones nomas, uno que le dice el nombre de la entidad cuando la serialize y el otro le dice si debe buscar las anotaciones de los atributos en la definicion de los atributos o en los getters/setters.&lt;br&gt;&lt;br&gt;programamos la clase que contiene muchos AddressBookEntry y la decoramos para poder serializarla:&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Vector&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlAccessType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlAccessorType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlElement&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.xml.bind.annotation.XmlRootElement&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@XmlAccessorType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;XmlAccessType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FIELD&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@XmlRootElement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"addressBook"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AddressBook&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@XmlElement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"entry"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;getEntries&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setEntries&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;removeEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addAll&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;searchByFirstName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addAll&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;searchByLastName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;searchByFirstName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="nl"&gt;entry:&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFirstName&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;indexOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;searchByLastName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AddressBookEntry&lt;/span&gt; &lt;span class="nl"&gt;entry:&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getLastName&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;indexOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;Lo unico que cambia con respecto al anterior es que a la coleccion le digo cual es el tag de cada elemento interno de la coleccion.&lt;br&gt;&lt;br&gt;con este decorador&lt;br&gt;&lt;br&gt;&lt;pre&gt;    &lt;span class="nd"&gt;@XmlElement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"entry"&lt;/span&gt;&lt;span class="o"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/pre&gt;le agregue algunos metodos de busqueda que nos van a servir mientras no tengamos persistencia.&lt;br&gt;&lt;br&gt;por ultimo modifique la clase que expone el webservice para que genere json y xml y cree un metodo temporal para llenar con datos el addressbook (hasta que haya persistencia).&lt;br&gt;&lt;br&gt;aca esta el codigo de addressbook.ws.AddressBook:&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ws&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;addressbook.model.AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.GET&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.Path&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.PathParam&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.Produces&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"book"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AddressBook&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;searchByFirstName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;searchByLastName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;getAddressBook&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;getAddressBook&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Esponja"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"321"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5551"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Gary"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Caracol"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 2"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"234"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"432"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5552"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Arenita"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Ardilla"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 3"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"345"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"543"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5553"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Patricio"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Estrella"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 4"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"456"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"654"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5554"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AddressBookEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Calamardo"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Calamar"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fondo de Bikini 5"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"567"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"765"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5555"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"xml/all"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/xml"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;getAllXml&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"json/all"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;getAllJson&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;addressBook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"xml/search/{type}/{query}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/xml"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;searchXml&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"query"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"json/search/{type}/{query}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddressBook&lt;/span&gt; &lt;span class="nf"&gt;searchJson&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"query"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;en el main agregue una linea antes de server.start(); en la que llamo a addressbook.ws.AddressBook.fill();&lt;br&gt;&lt;br&gt;ahora con todo eso puesto, si corremos el ejemplo vamos a obtener resultados serializados, ejemplos de urls para probar los gets:&lt;br&gt;&lt;br&gt;para obtener todos en xml:&lt;br&gt;&lt;br&gt;http://0.0.0.0:9999/ws/book/xml/all&lt;br&gt;&lt;br&gt;para obtener todos en json:&lt;br&gt;&lt;br&gt;http://0.0.0.0:9999/ws/book/json/all&lt;br&gt;&lt;br&gt;para buscar los que contienen en el nombre "ob" en xml:&lt;br&gt;&lt;br&gt;http://0.0.0.0:9999/ws/book/xml/search/firstName/ob/&lt;br&gt;&lt;br&gt;para buscar los que contienen en el apellido "a" en json:&lt;br&gt;&lt;br&gt;http://0.0.0.0:9999/ws/book/json/search/lastName/a/&lt;br&gt;&lt;br&gt;para buscar los que contienen en el nombre o apellido "e" en xml:&lt;br&gt;&lt;br&gt;http://0.0.0.0:9999/ws/book/xml/search/all/e/&lt;br&gt;&lt;br&gt;supongo que van entendiendo ;)&lt;br&gt;&lt;br&gt;bueno, eso es todo por ahora en la proxima como escribir un modulo para javascript para consumir los webservices json y transformarlos en objetos y tambien como "dar de alta" nuevos AddressBookEntry.</description><category>java</category><category>jaxb</category><category>jersey</category><category>jetty</category><category>json</category><category>rest</category><category>xml</category><guid>http://marianoguerra.org/posts/200903serializardesserializar-objetos-java/</guid><pubDate>Tue, 24 Mar 2009 23:25:00 GMT</pubDate></item><item><title>Webservices REST en Java con Jetty y Jersey</title><link>http://marianoguerra.org/posts/200903webservices-rest-en-java-con-jetty-y/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;p&gt;En este post voy a explicar como hacer una aplicacion Java SE que exponga una API REST tanto JSON como XML.&lt;br&gt;&lt;br&gt;primero empezamos creando un proyecto comun en netbeans, le ponemos el nombre que se nos ocurra, te recomiendo addressbook asi no tenes que cambiar el codigo :D.&lt;br&gt;&lt;br&gt;despues tenemos que agregar todos los jars que vamos a usar en el proyecto.&lt;br&gt;&lt;br&gt;aca doy una lista de las ultimas versiones, pero pueden quedar desactualizadas rapido, asi que fijense si no hay mas nuevas.&lt;br&gt;&lt;br&gt;Primero que todo necesitamos un servidor web embebido, para ello vamos a usar &lt;a href="http://www.mortbay.org/jetty/"&gt;jetty&lt;/a&gt;, el cual bajamos de aca: &lt;a href="http://dist.codehaus.org/jetty/"&gt;http://dist.codehaus.org/jetty/&lt;/a&gt; yo baje este &lt;a href="http://dist.codehaus.org/jetty/jetty-6.1.15/jetty-6.1.15.zip"&gt;http://dist.codehaus.org/jetty/jetty-6.1.15/jetty-6.1.15.zip&lt;/a&gt; al descomprimir el zip, en la carpeta lib estan los jars que hacen falta&lt;br&gt;&lt;br&gt;Tambien necesitamos una libraria para poder exponer nuestros webservices REST, para ello vamos a usar &lt;a href="http://jersey.dev.java.net/"&gt;jersey&lt;/a&gt;, yo baje el bundle (contiene todos los jars adentro que requiere) de aca &lt;a href="http://download.java.net/maven/2/com/sun/jersey/jersey-bundle/"&gt;http://download.java.net/maven/2/com/sun/jersey/jersey-bundle/&lt;/a&gt;, particularmente yo baje la version 1.0.2 de aca &lt;a href="http://download.java.net/maven/2/com/sun/jersey/jersey-bundle/1.0.2/jersey-bundle-1.0.2.jar"&gt;http://download.java.net/maven/2/com/sun/jersey/jersey-bundle/1.0.2/jersey-bundle-1.0.2.jar&lt;/a&gt;&lt;br&gt;&lt;br&gt;el jar asm lo podemos descargar de aca &lt;a href="http://maven.objectweb.org/maven2/asm/asm"&gt;http://maven.objectweb.org/maven2/asm/asm&lt;/a&gt;/ yo baje la version 3.1 de aca &lt;a href="http://maven.objectweb.org/maven2/asm/asm/3.1/asm-3.1.jar"&gt;http://maven.objectweb.org/maven2/asm/asm/3.1/asm-3.1.jar&lt;/a&gt;&lt;br&gt;&lt;br&gt;el jar jsr311 se encuentra en &lt;a href="http://download.java.net/maven/2/javax/ws/rs/jsr311-api/"&gt;http://download.java.net/maven/2/javax/ws/rs/jsr311-api/&lt;/a&gt; yo baje &lt;a href="http://download.java.net/maven/2/javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"&gt;http://download.java.net/maven/2/javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar&lt;/a&gt;&lt;br&gt;&lt;br&gt;Para empezar agregamos los siguientes jar al proyecto:&lt;br&gt;&lt;br&gt;jersey-bundle-1.0.2.jar&lt;br&gt;jetty-util-6.1.15.jar&lt;br&gt;servlet-api-2.5-20081211.jar&lt;br&gt;jetty-6.1.15.jar&lt;br&gt;jsr311-api-1.0.jar&lt;br&gt;asm-3.1.jar&lt;br&gt;&lt;br&gt;Creamos un archivo main con el siguiente contenido&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.sun.jersey.spi.container.servlet.ServletContainer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.Handler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.handler.DefaultHandler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.handler.HandlerList&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.servlet.Context&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.mortbay.jetty.servlet.ServletHolder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;     * @param args the command line arguments&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt;     */&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mortbay&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;jetty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;ServletHolder&lt;/span&gt; &lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;Context&lt;/span&gt; &lt;span class="n"&gt;contextWS&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;holder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ServletHolder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ServletContainer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setInitParameter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"com.sun.jersey.config.property.packages"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class="s"&gt;"addressbook.ws"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mortbay&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;jetty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9999&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;contextWS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/ws"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SESSIONS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;contextWS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addServlet&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/*"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;HandlerList&lt;/span&gt; &lt;span class="n"&gt;handlers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HandlerList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;handlers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHandlers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Handler&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;contextWS&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultHandler&lt;/span&gt;&lt;span class="o"&gt;()});&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handlers&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;lo que hace es inicializar el server en el puerto 9999 y pasarle un handler para los requests que estan bajo el path /ws.&lt;br&gt;&lt;br&gt;la linea&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;span class="n"&gt;holder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setInitParameter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"com.sun.jersey.config.property.packages"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"addressbook.ws"&lt;/span&gt;&lt;span class="o"&gt;);&lt;br&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;le dice que busque los manejadores de ws en el paquete addressbook.ws, por lo tanto el siguiente paso es crear el paquete addressbook.ws.&lt;br&gt;&lt;br&gt;Por lo que veran el ejemplo va a ser un libro de direcciones o cosas por el estilo.&lt;br&gt;&lt;br&gt;despues de crear el paquete creamos una clase adentro que llamamos AddressBook&lt;br&gt;&lt;br&gt;el contenido es el siguiente:&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * To change this template, choose Tools | Templates&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * and open the template in the editor.&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;addressbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ws&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.GET&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.Path&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.PathParam&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.ws.rs.QueryParam&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="c"&gt;/**&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; *&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; * @author mariano&lt;/span&gt;&lt;br&gt;&lt;span class="c"&gt; */&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"book"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AddressBook&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"all"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getAll&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"all"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nd"&gt;@GET&lt;/span&gt;&lt;br&gt;&lt;span class="nd"&gt;@Path&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"search/{type}/{query}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getAll&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;@PathParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"query"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;br&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;El codigo es bastante simple, en la clase le decimos cual es el path base de esa clase, y en cada metodo le decimos que tipo de request responde (en lenguaje REST tenemos GET, POST, PUT y DELETE) y tambien podemos especificarle parametros los cuales van entre llaves en @Path y tambien en el metodo debemos anotar cual parametro del path se asigna a que parametro del metodo.&lt;br&gt;&lt;br&gt;Por ahora los metodos devuelven cosas simples, en otro post voy a mostrar como serializar/descerializar objetos java de/a XML y JSON&lt;br&gt;&lt;br&gt;si lo corremos y vamos con el browser a http://0.0.0.0:9999/ws/book/all vamos a ver el texto "all", si vamos a http://0.0.0.0:9999/ws/book/search/name/bob vamos a ver "name bob"</description><category>java</category><category>jaxb</category><category>jersey</category><category>jetty</category><category>json</category><category>rest</category><category>xml</category><guid>http://marianoguerra.org/posts/200903webservices-rest-en-java-con-jetty-y/</guid><pubDate>Tue, 24 Mar 2009 22:13:00 GMT</pubDate></item></channel></rss>