Sunteți pe pagina 1din 9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

Iteracin2.APIRESTparalaaplicacindegestindereservas
FJRPCCIA2011

Date:Noviembre2011

ndiceGeneral
Pasosprevios:configuracindelproyectoNetbeans
ImplementarelAPIRESTdeaccesoalosclientes
Desplegaryprobarelejemplo
TAREASAREALIZAR
APIRESTparaaccesoalosHoteles
APIRESTparaaccesoalasReservas
Documentacinaentregar

Pasosprevios:configuracindelproyectoNetbeans

IMPORTANTE:ProblemasconGlassFishv3.1
LaversindeGlassFishquesedistribuyeconNetbeans7.0tieneunaimplementacindelAPICDI(Java
ContextsandDependencyInjection)convariosbugsquecomplicaneldespliguedealgunasaplicaciones
(msinformacin).
EnlaversindeGlassFish3.1.1(quesedistribuyeconNetbeans7.0.1)seemplealaversin1.1.1Finaldel
proyectoWeldqueresuelveelproblema.
SOLUCIONES:
1. TrabajarconNetbeans7.0.1yGlassFish3.1.1
2. DeshabilitarelsoporteCDIenelproyectoGestionReservasrest
BastarconeliminarelficherodeconfiguracindeCDI(beans.xml)
1. EnelproyectoGestionReservasrest,dentrodeConfigurarionFiles,seleccionarbeans.xml,[botn
derecho]+Delete

2. ReiniciarelservidorGlassFish(adicionalmentesepuedeeliminar[undeploy]laaplicacin
GestionReservasdesdelapestaadeservidoresdeNetbeans),limpiaryreconstruirelproyecto
principalyvolveradesplegarlo(Deploy)

SetrabajarsobreelsubproyectoJavaWebGestionReservasrest,incialmentevaco.
EsteproyectoestvinculadocomomduloalproyectoJavaEEGestionReservas,demodoquealdesplegarelproyecto
principaltambinquedardesplegadoyaccesibleelsubproyectoREST.
LaURLdonderecibirlaspeticionesHTTPestesubproyecto(contextpath)eshttp://localhost:8080/GestionReservas
rest/)

1. IncluirelJARdelproyectoGestionReservasejbparatenerdisponibleslos.classdelasentidadesJPAydelosinterfacesde
losEJBs

Sobreelproyecto''GestionReservasrest''>[botnderecho]>seleccionar''Properties''
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

1/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

En''Libraries'',pulsarbotn''AddProject''yseleccionar''GestionReservasejb''[AddProjectJARfiles]+[OK]

2. CrearelApplicationPath(razdelosURIsdelAPIREST)
Sobre''sourcespackages''crearunnuevopaqueteJavadenombre''rest''
CrearunaclaseJava''GestionReservasAplicacionREST''queherededejavax.ws.rs.core.Application.
Paraesteejemploserunaclasevaca,cuyanicautilidadesestablecerelcontextodelosrecursosRESTconla
anotacin@javax.ws.rs.ApplicationPath
(ennuestrocasolaraizdelosrecursosRESTserhttp://localhost:8080/GestionReservasrest/rest/)
packagerest;
@javax.ws.rs.ApplicationPath("rest")
publicclassGestionReservasAplicacionRESTextendsjavax.ws.rs.core.Application{
}

3. CrearlaclasedeimplementacindelosrecursosREST.
SerunEJBdesesinlocalsininterfaz.Sehaceasparapoderusarelsoportedeinyeccindedependenciasparaaccedera
losEJBsdelproyectoGestionReservasejb
Sobreelpaquete''rest'',[botnderecho],New

Other

JavaEE

SessionBean

EJBName:GestionReservasClienteREST
Package:rest
SessionType:Stateless
Noseleccionarningninterfaz

AnotarlaclasedelEJB
con@Path(''clientes'')paraespecificarelpathdedondecolgarnlosrecursosREST
con@Produces({''application/xml'',''application/json''})paraespecificareltipodecontenidopermitdo
enlosmensajesHTTPderespuesta
con@Consumes({''application/xml'',''application/json''})paraespecificareltipodecontenidoadmitido
enlaspeticionesHTTPrecibidas
@Stateless
@LocalBean
@Path("/clientes")
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json"})
publicclassGestionReservasClienteREST{
...
}

ImplementarelAPIRESTdeaccesoalosclientes
1. CrearlasclasesJAXBquesoportarnlaserializacindedatosenXML/JSON(porejemploClienteREST)
1. Sobre''sourcespackages''crearunnuevopaqueteJavadenombre''jaxb''
2. Sobreelpaquete''rest''>[botnderecho]>New>Other>JavaClass
Anotarlacon@XmlRootElementeincluirlosatributosamanejarenlosdocumentosXML/JSONaintercambiar.
Sedeclararncomoprivateyseanotarncon@XmlElementparaqueJABXlosincluyaenlosXMLgenerados
SeusarlaconvencindeserializarlosatributosiddelasentidadesencomoatributosXML(anotacin
@XmlAttribute)enlugardecomoelementosXML.
Debeincluirseunconstructorvacoycrearmtodosget()yset()paratodoslosatributos[importante]
Sehaincluidounconstructor''deconveniencia''quetomalaentidadClienteoriginalyunStringconlaURIbase
dondeestdesplegadoelrecursoyaaprtirdeellossecopian/construyenlosatributosdeClienteREST
Nota:OtraalternativapodrahacersidoutilizardirectamentelasentidadesJPAdelpaqueteentidades,
aadindoleslascorrespondientesanotacionesJAXByevitandoenelmapeolasreferenciascircularesentre
entidades.
packagejaxb;
importjavax.xml.bind.annotation.XmlAttribute;
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

2/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

importjavax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
publicclassClienteREST{
privateLongid;
privateStringnombre;
privateStringapellidos;
privateStringnif;
privateStringdomicilio;
privateStringlocalidad;
privateStringcodPostal;
privateStringprovincia;
privateStringtelefono;
privateStringURI;//AlamcenaelURIdelrecurso
publicClienteREST(){
}
publicClienteREST(entidades.Clientecliente,StringURIbase){
this.id=cliente.getId();
this.nombre=cliente.getNombre();
this.apellidos=cliente.getApellidos();
this.nif=cliente.getNif();
this.domicilio=cliente.getDomicilio();
this.localidad=cliente.getLocalidad();
this.codPostal=cliente.getCodPostal();
this.provincia=cliente.getProvincia();
this.telefono=cliente.getTelefono();

this.URI=URIbase+this.id;//ConstruyeelURI
}
@XmlAttribute//ParaserializarelIDcomoatributoXMLynocomoelemento
publicStringgetId(){

returnthis.id;
}
...
}

3. CrearlosmtodosqueatendernlaspeticionesRESTymapearlasURIsymtodosHTTP
1. InyectarlasreferenciasalosEJBsautilizar.
@Stateless
@LocalBean
@Path("/clientes")
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json"})
publicclassEjemploREST{
@EJB
ClienteDAOLocalclienteDAO;
...
}

2. InyectarunareferenciaalobjetogestordeURIsdelAPIJAXRS(mediantelaanotacin@Contextaplicadaaun
objetojavax.ws.rs.core.UriInfo)
@Stateless
@LocalBean
@Path("/clientes")
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json"})
publicclassEjemploREST{
@EJB
ClienteDAOLocalclienteDAO;
@Context
privateUriInfouriInfo;//Info.sobrelaURIdondeservidordespliegaelrecurso
...
}

3. ImplementarlospuntosfinalesdelasURIsymtodosREST.
ConsultaalEJBclienteDAOyconviertelasentidadesClienteenunalistadeobjetosClienteRESTque
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

3/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

sernenviadosalcliente.
@GET
publicList<ClienteREST>listaClientes(){
List<ClienteREST>lista=newArrayList<ClienteREST>();
StringuriBase=uriInfo.getBaseUri().toString();
for(Clientec:clienteDAO.buscarTodos()){
lista.add(newClienteREST(c,uriBase));
}
returnlista;
}

ObtienelosdatosdelClientecuyoIDseindicaenelpathdelURI
@Path("/{id}")
@GET
publicClienteRESTclientePorId(@PathParam("id")Longid){
Clientec=clienteDAO.buscarPorId(id);
return(newClienteREST(c,uriInfo.getBaseUri().toString()));
}

BorraelClientecuyoIDseindicaenelpathdelURI
@Path("/{id}")
@DELETE
publicvoidborrarCliente(@PathParam("id")Longid){
Clientec=clienteDAO.buscarPorId(id);
clienteDAO.eliminar(c);
}

CreaunnuevoclienteconlosdatosrecibidosydevuelvelaURIdelrecursocreado
@POST
@TransactionAttribute(TransactionAttributeType.NEVER)//ParaqueelclienteDAO
//gestione(ytermine)
//supropiatransaccin
publicResponsecrearCliente(JAXBElement<ClienteREST>clienteJAXB){
ClienteRESTclienteREST=clienteJAXB.getValue();
Clientenuevo=newCliente();
nuevo.setNombre(clienteREST.getNombre());
nuevo.setApellidos(clienteREST.getApellidos());
nuevo.setNif(clienteREST.getNif());
nuevo.setDomicilio(clienteREST.getDomicilio());
nuevo.setCodPostal(clienteREST.getCodPostal());
nuevo.setProvincia(clienteREST.getProvincia());
nuevo.setTelefono(clienteREST.getTelefono());

nuevo=clienteDAO.crear(nuevo);

URInuevoURI=uriInfo.getAbsolutePathBuilder().path(nuevo.getId().
toString()).build();
returnResponse.created(nuevoURI).build();
}

Desplegaryprobarelejemplo
1. SobreelproyectoprincipalGestionReservas,desplegarlaaplicacin(conloqueseincluyeeldespliegedelmdulo
GestionReservasrest)
2. ProbarelaccesoalasURIsdefinidasdesdeunnavegadoroconlaherramientadelineadecomandoscurl
curlvhttp://localhost:8080/GestionReservasrest/rest/clientes
curlvXGETH"Accept:application/json"http://localhost:8080/GestionReservasrest/rest/clientes
curlvhttp://localhost:8080/GestionReservasrest/rest/clientes/4
curlvXGETH"Accept:application/json"http://localhost:8080/GestionReservasrest/rest/clientes/4
curlvXPOSThttp://localhost:8080/GestionReservasrest/rest/clientes\
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

4/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

HContenttype:application/xml\
data"<?xmlversion=\"1.0\"encoding=\"UTF8\"standalone=\"yes\"?>\
<clienteREST>\
<nombre>Lucas</nombre>\
<apellidos>GrijanderGrijander</apellidos>\
<nif>33333333C</nif>\
<domicilio>Sucasa</domicilio><localidad>Santiago</localidad>\
<codPostal>15333</codPostal><provincia>ACorua</provincia>\
<telefono>981333333</telefono>\
</clienteREST>"

TAREASAREALIZAR
AmpliarelAPIRESTdefinidoconfuncionalidadesparaelaccesoaHotelesyReservasdeacuerdoalasiguiente
especificacin
Nota:Sedeberndefinirlasclasesadicionalesencargadasde''portar''losdatosqueseintercambiaranenformatoXMLo
JSONalaccederalosrecursosmediantelosmtodosREST.
Sonnecesariaslasclases:HotelREST,TipoHabitacionREST,ReservaREST
Todasestarnanotadascon@XmlRootElement
Todasseguirnconvencionessimilaresalasdelejemploanterior:unconstructorapartirdelaclaseEntidadasociada,
juntoconlaURIbase,ysuIDseserializarcomounatributoXML(anotacin@XmlAttibute).

APIRESTparaaccesoalosHoteles
CrearunanuevaclaseparagestionarlosrecursosRESTdentrodel''path''@Path("hoteles")
(URI:http://localhost:8080/GestionReservasrest/rest/hoteles)
ImplementarlacomounEJBsinestadoconinterfazlocal:anotaciones@Statelessy@LocalBean+mtodospblicos.

MtodosRESTasoportar
Mtodo1
Mtodo:GETPath:/hoteles
DevuelvelalistadeobjetosHotelRESTconlosdatosdeloshotelesdisponibles.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/hoteles
<hotelRESTs>
<hotelRESTid="1">
<categoria>2estrellas</categoria>
<codPostal>32004</codPostal>
<descripcion>HotelRestaurantePepe</descripcion>
<domicilio>AsLagoas</domicilio>
<localidad>Ourense</localidad>
<nombre>HotelPepe</nombre>
<provincia>Ourense</provincia>
<telefono>988333333</telefono>
<URI>http://localhost:8080/GestionReservasrest/rest/hoteles/1</URI>
</hotelREST>
<hotelRESTid="2">
<categoria>2estrellas</categoria>
<codPostal>32008</codPostal>
<descripcion>HostalResidenciaLucas</descripcion>
<domicilio>APonte</domicilio>
<localidad>Ourense</localidad>
<nombre>HostalLucas</nombre>
<provincia>Ourense</provincia>
<telefono>988777777</telefono>
<URI>http://localhost:8080/GestionReservasrest/rest/hoteles/2</URI>
</hotelREST>
...
</hotelRESTs>

Mtodo2
Mtodo:GETPath:/hoteles/{localidad:[azAZ_]+}
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

5/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

DevuelvelalistadeobjetosHotelRESTconlosdatosdeloshotelesdisponiblesenlalocalidadindicada.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/hoteles/Ourense
Mtodo3
Mtodo:GETPath:/hoteles/{id:[09]+}
DevuelveunobjetoHotelRESTconlosdatosdelhotelindicado.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/hoteles/2
<hotelRESTid="2">
<categoria>2estrellas</categoria>
<codPostal>32008</codPostal>
<descripcion>HostalResidenciaLucas</descripcion>
<domicilio>APonte</domicilio>
<localidad>Ourense</localidad>
<nombre>HostalLucas</nombre>
<provincia>Ourense</provincia>
<telefono>988777777</telefono>
<URI>http://localhost:8080/GestionReservasrest/rest/hoteles/2</URI>
</hotelREST>

Mtodo4
Mtodo:GETPath:/hoteles/{id:[09]+}/habitaciones
DevuelvelalistadeobjetosTipoHabitacionRESTconlosdatosdelostiposdehabitacindelhotelindicado.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/hoteles/2/habitaciones
<tipoHabitacionRESTs>
<tipoHabitacionRESTid="4">
<capacidad>2</capacidad>
<descripcion>HabitacindobleeconmicaconTVybao</descripcion>
<nombre>Doble</nombre>
<precio>35.0</precio>
<URI>http://localhost:8080/GestionReservasrest/rest/hoteles/2/habitaciones/4</URI>
<URIHotel>http://localhost:8080/GestionReservasrest/rest/hoteles/2</URIHotel>
</tipoHabitacionREST>
<tipoHabitacionRESTid="5">
<capacidad>1</capacidad>
<descripcion>HabitacinindividualeconmicaconTV</descripcion>
<nombre>Individual</nombre>
<precio>25.0</precio>
<URI>http://localhost:8080/GestionReservasrest/rest/hoteles/2/habitaciones/5</URI>
<URIHotel>http://localhost:8080/GestionReservasrest/rest/hoteles/2</URIHotel>
</tipoHabitacionREST>
...
</tipoHabitacionRESTs>
Posibleimplementacin:
@GET@Path("{id:[09]+}/habitaciones")
publicList<TipoHabitacionREST>getHabitacionesPorHotel(@PathParam("id")Longid){
StringuriBase=uriInfo.getBaseUri().toString();
Hotelh=hotelDAO.buscarPorId(id);
List<TipoHabitacionREST>lista=newArrayList<TipoHabitacionREST>();
for(TipoHabitaciont:h.getTiposHabitacion()){
lista.add(newTipoHabitacionREST(t,uriBase));
}
returnlista;
}

Mtodo5
Mtodo:GETPath:/hoteles/{id:[09]+}/disponibilidad
QueryParams:fechaInicio,fechaFin
DevuelvelalistadeobjetosTipoHabitacionRESTconlosdatosdelostiposdehabitacindelhotelindicadoqueestn
disponiblesenlasfechasindicadascomoQueryParams:?fechaInicio=dd/MM/yyyy&fechaFin=dd/MM/yyyyy.
Ejemplo:
http://localhost:8080/GestionReservasrest/rest/hoteles/2/disponibilidad?fechaInicio=1/1/2011&fechaFin=2/2/2011

http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

6/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

Notas:PordefectoenelAPIJAXRSsemanejanlasfechasenformatomes/da/ao(elformatopordefectodeJava).
Obienseutilizaeseformato,capturandolosQueryParamdirectamentecomoobjetosDate
@GET@Path("{id:[09]+}/disponibilidad2)
publicList<TipoHabitacionREST>getHabitacionesPorHotelYFecha(@PathParam("id")Longid,
@QueryParam("fechaInicio")DatefechaInicio,
@QueryParam("fechaFin")DatefechaFin){
...
}

ObiensecapturanlosQueryParamcomoStringenformatodd/MM/yyyyyyseusaunobjetoSimpleDateFormat
paraconvertirlosaobjetosDate
@GET@Path("{id:[09]+}/disponibilidad")
publicList<TipoHabitacionREST>getHabitacionesPorHotelYFecha(@PathParam("id")Longid,
@QueryParam("fechaInicio")StringstrInicio,
@QueryParam("fechaFin")StringstrFin)throwsParseException{
SimpleDateFormats=newSimpleDateFormat("dd/MM/yyyy");
DatefechaInicio=s.parse(strInicio);
DatefechaFin=s.parse(strFin);
...
}

Mtodo6
Mtodo:GETPath:/hoteles/{id:[09]+}/reservas
DevuelvelalistadeobjetosReservaRESTconlosdatosdelasreservasdelhotelindicado.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/hoteles/2/reservas
<reservaRESTs>
<reservaRESTid="3">
<cantidad>1</cantidad>
<fechaFin>20100208T00:00:00+01:00</fechaFin>
<fechaInicio>20100204T00:00:00+01:00</fechaInicio>
<idCliente>4</idCliente>
<idTipoHabitacion>4</idTipoHabitacion>
<idhotel>2</idhotel>
<nombreTomador>Marcos</nombreTomador>
<ocupacion>1</ocupacion>
<precio>35.0</precio>
<URI>http://localhost:8080/GestionReservasrest/rest/reservas/3</URI>
</reservaREST>
<reservaRESTid="82>
<cantidad>1</cantidad>
<fechaFin>20100322T00:00:00+01:00</fechaFin>
<fechaInicio>20100327T00:00:00+01:00</fechaInicio>
<idCliente>3</idCliente>
<idTipoHabitacion>4</idTipoHabitacion>
<idhotel>2</idhotel>
<nombreTomador>luis</nombreTomador>
<ocupacion>1</ocupacion>
<precio>35.0</precio>
<URI>http://localhost:8080/GestionReservasrest/rest/reservas/8</URI>
</reservaREST>
...
</reservaRESTs>

APIRESTparaaccesoalasReservas
CrearunanuevaclaseparagestionarlosrecursosRESTdentrodel''path''@Path("reservas")
(http://localhost:8080/GestionReservasrest/rest/reservas)
ImplementarlacomounEJBsinestadoconinterfazlocal:anotaciones@Statelessy@LocalBean+mtodospblicos.

MtodosRESTasoportar
Mtodo1
Mtodo:GETPath:/reservas
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

7/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

DevuelvelalistadeobjetosReservaRESTconlosdatosdetodaslasreservas.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/reservas
<reservaRESTs>
<reservaRESTid="1">
<cantidad>1</cantidad>
<fechaFin>20100203T00:00:00+01:00</fechaFin>
<fechaInicio>20100201T00:00:00+01:00</fechaInicio>
<idCliente>3</idCliente>
<idTipoHabitacion>1</idTipoHabitacion>
<idhotel>1</idhotel>
<nombreTomador>Luis</nombreTomador>
<ocupacion>1</ocupacion>
<precio>45.0</precio>
<URI>http://localhost:8080/GestionReservasrest/rest/reservas/1
</URI>
</reservaREST>
<reservaRESTid="2">
<cantidad>1</cantidad>
<fechaFin>20100207T00:00:00+01:00</fechaFin>
<fechaInicio>20100205T00:00:00+01:00</fechaInicio>
<idCliente>3</idCliente>
<idTipoHabitacion>1</idTipoHabitacion>
<idhotel>1</idhotel>
<nombreTomador>Luis</nombreTomador>
<ocupacion>1</ocupacion>
<precio>45.0</precio>
<URI>http://localhost:8080/GestionReservasrest/rest/reservas/2</URI>
</reservaREST>
<reservaRESTid="3">
...
</reservaREST>
...
</reservaRESTs>

Mtodo2
Mtodo:GETPath:/reservas/{id:[09]+}
DevuelveunobjetoReservaRESTconlosdatoslareservaindicada.
Ejemplo:http://localhost:8080/GestionReservasrest/rest/reservas/4
Mtodo1
Mtodo:DELETEPath:/reservas/{id:[09]+}
Eliminalosdatosdelareservaindicada.
Ejemplo:curlvXDELETEhttp://localhost:8080/GestionReservasrest/rest/reservas/4
Mtodo1
Mtodo:POSTPath:/reservas
CreaunanuevareservaconlosdatosdelobjetoReservaRESTenviadoenlapeticinPOST
Ejemplo:
curlvXPOSThttp://localhost:8080/GestionReservasrest/rest/reservas\
HContenttype:application/xml\
data"<?xmlversion=\"1.0\"encoding=\"UTF8\"standalone=\"yes\"?>\
<reservaREST>\
<cantidad>1</cantidad>\
<fechaInicio>20101221</fechaInicio>\
<fechaFin>20101227</fechaFin>\
<idCliente>4</idCliente>\
<idTipoHabitacion>1</idTipoHabitacion>\
<idhotel>1</idhotel>\
<nombreTomador>prubaREST</nombreTomador>\
<ocupacion>1</ocupacion>\
<precio>45.0</precio>\
</reservaREST>""

Posibleimplementacin:(presuponequeelEJBHotelDAOincluyeunmtodobuscarTipoHabitacion()quedevuelve
unobjetoTipoHabitacinapartirdesuID)
@POST
@TransactionAttribute(TransactionAttributeType.NEVER)
//FuerzaaquereservaDAOgestione(ytermine)supropiatransaccion
http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

8/9

16/4/2015

Iteracin2.APIRESTparalaaplicacindegestindereservas

publicResponsecrearReserva(JAXBElement<ReservaREST>reservaJAXB){
ReservaRESTreservaREST=reservaJAXB.getValue();
Reservanueva=newReserva();
nueva.setFechaInicio(reservaREST.getFechaInicio());
nueva.setFechaFin(reservaREST.getFechaFin());
nueva.setCantidad(reservaREST.getCantidad());
nueva.setNombreTomador(reservaREST.getNombreTomador());
nueva.setOcupacion(reservaREST.getOcupacion());
nueva.setCliente(clienteDAO.buscarPorId(reservaREST.getIdCliente()));
nueva.setTipoHabitacion(hotelDAO.buscarTipoHabitacion(reservaREST.getIdTipoHabitacion()));
nueva=reservaDAO.crear(nueva);
URInuevaURI=uriInfo.getAbsolutePathBuilder().path(nueva.getId().toString()).build();
returnResponse.created(nuevaURI).build();
}

Documentacinaentregar
Ladocumentacinyelcdigoaentregarparaesta''iteracin2''seintegrarnconlosdela''iteracin1''.
SeincluirelproyectoNetbeansGestionReservasrest
Enlamemoriaescritaseincluirunapartadoconlasiguienteestructura:
DescripcinresumidadelAPIRESTofrecido(URIs+MtodosHTTP+Descripcin)tantoparaClientes,comopara
HotelesyReservas
Descripcindelospaquetesyclasesaadidas(clasesdemapeoXML+clasesdeimplementacindelosendpoint
REST)
DescripcindelosmtodosqueimplementanelAPIRESTydelainteraccindelasclasesdeimplementacinconlos
EJBsdedelproyectoGestionReservasejbqueimplementanlacapadenegocio.

ribadas20111123

http://ccia.ei.uvigo.es/docencia/SCS/1112/jee/ejemploJAXRS/

9/9

S-ar putea să vă placă și