Date post: | 06-Apr-2016 |
Category: |
Documents |
Upload: | sebastian-eberhardt |
View: | 214 times |
Download: | 0 times |
Enterprise-IT-PraktikumJAX-RS-Einführung
Institut für TelematikUniversität zu Lübeck
Wintersmester 2012/13Dennis BoldtDavid Gregorczyk
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 2
Wer kennt es nicht – ROA• ROA steht für Resource-oriented Architecture
Counterpart: Service-oriented Architecture (SOA)• Roy Fielding: Representational State Transfer (ReST)• Konzept: über Hyperlinks (URIs) werden Ressourcen
bereitgestellt und/oder miteinander verknüpft– Adressierbarkeit– Unterschiedliche Repräsentationen– Zustandslosigkeit– Wohldefinierte Zugriffsoperationen– Hypermedia
• Wie komisch, passt ja perfekt zu HTTP…
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 3
Gibt’s da auch was von Ratiopharm?• Nein, aber von Java: JSR-311
Java API for RESTful Web Services (JAX-RS)• Reference Implementation „Jersey“
• Subprojekt vom GlassFish-Application-Server• http://jersey.java.net
• Unterstützt die Konstruktion von REST-konformen Schnittstellen mit Hilfe von Java-Annotationen
• JAX-RS 1.1 fertiggestellt• Version 2.0 ist im Bearbeitungsstatus
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 4
VorgehenServer-Seite• Klassen mit Funktionalität programmieren• Annotationen einfügen• Web-Server-Deployment durchführenClient-Seite• Testen z.B. mit curl auf Kommandozeile:
curl –HAccept:application/json http://localhost:8080/rest/hello
• Browser-Plugin: XHR-Poster• Jersey-Client-API
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 5
Server-Seite: Klassen programmieren
public class HelloResource // Name beliebig{
public String sayProst() // Name beliebig { return "Prost"; }}
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 6
Server-Seite: Annotationen einfügen@Path("/hello")public class HelloResource //Name beliebig{ @GET @Produces(MediaType.TEXT_PLAIN) public String sayProst() //Name beliebig { return "Prost"; }}
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 7
Deployment: Servlet-Container mit Tomcat<web-app …> <servlet> <servlet-name>ServletAdaptor</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ServletAdaptor</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config></web-app>
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 8
Deployment: Java NIO mit GrizzlyURI baseUri =
UriBuilder.fromUri("http://localhost/rest").port(9998).build();ResourceConfig rc = new
PackagesResourceConfig("pkg.to.resources");HttpServer srv = GrizzlyServerFactory.createHttpServer(baseUri,
rc);System.in.read();srv.stop();
Quelle: Jersey Documentationhttp://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e54
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 9
Da geht noch was…• Ein- und Ausgabeparameter• Sub-resources-Konzept für strukturierten
Ressourcen-Zugriff• Automatisches Marshalling/Unmarshalling von
Java-Objekten zu XML/JSON sehr elegant z.B. mit JAXB
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 10
Ein- und Ausgabeparameter@Path("/users")public class UserResource{ @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public String createUser(String userData) { ... }
@GET @Path("{userid}") @Produces(MediaType.APPLICATION_JSON) public String getUser(@PathParam("userid") String userId) { ... }}
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 11
Das Sub-resources-Konzept@Path("/rest")public class RestResource{ @Path("users") public String userSubresource(String userData) { return new UserResource(); }}
public class UserResource{ ...}
• Sub-sub-Resources, Sub-sub-sub-Resources usw. möglich
• Sub-Resources erhalten KEINE Kontextinformationen
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 12
Automatisches Marshalling/Unmarshalling (1/2)• Ein-/Ausgabe-Parameter standardmäßig Strings…• Automatische Transformation wünschenswert• JAXB
• XML-zu-Java-Objekt-Mapping-Spezifikation, JSR-222• http://jaxb.java.net/
• Kann in Zusammenhang mit Jersey eingesetzt werden
• Sowohl für XML als auch für JSON• Statt Strings werden in den Resource-Definitionen
die JAXB-Beans angegeben
• Vorteil mit Hibernate: gemeinsame Klassen für Persistenz und Serialisierung möglich
Institut für Telematik | Enterprise-IT-Praktikum
Enterprise-IT-Praktikum – JAX-RS-Einführung 13
Automatisches Marshalling/Unmarshalling (2/2)// JAXB-Bean@XmlRootElementpublic class User{
private String userName;private String password;
}
// JAX-RS-Ressource – Parameter und Rückgabe sind User-Objekte@Path("/users")public class UserResource{ @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public User createUser(User userData) { ... }}