Submit Search
Upload
Oredev 2009 JAX-RS
•
Download as ODP, PDF
•
3 likes
•
686 views
Niklas Gustavsson
Follow
Introduction to JAX-RS that I gave at Øredev 2009
Read less
Read more
Technology
Design
Report
Share
Report
Share
1 of 60
Download now
Recommended
REST made simple with Java
REST made simple with Java
Niklas Gustavsson
the Spring 4 update
the Spring 4 update
Joshua Long
Introduction to SQLite in Adobe AIR
Introduction to SQLite in Adobe AIR
Peter Elst
Whats New in the Http Service Specification - Felix Meschberger
Whats New in the Http Service Specification - Felix Meschberger
mfrancis
JAX-RS 2.1 Reloaded @ Devoxx
JAX-RS 2.1 Reloaded @ Devoxx
Santiago Pericas-Geertsen
Felix HTTP - Paving the road to the future
Felix HTTP - Paving the road to the future
Marcel Offermans
Box connector Mule ESB Integration
Box connector Mule ESB Integration
AnilKumar Etagowni
Simple REST with Dropwizard
Simple REST with Dropwizard
Andrei Savu
Recommended
REST made simple with Java
REST made simple with Java
Niklas Gustavsson
the Spring 4 update
the Spring 4 update
Joshua Long
Introduction to SQLite in Adobe AIR
Introduction to SQLite in Adobe AIR
Peter Elst
Whats New in the Http Service Specification - Felix Meschberger
Whats New in the Http Service Specification - Felix Meschberger
mfrancis
JAX-RS 2.1 Reloaded @ Devoxx
JAX-RS 2.1 Reloaded @ Devoxx
Santiago Pericas-Geertsen
Felix HTTP - Paving the road to the future
Felix HTTP - Paving the road to the future
Marcel Offermans
Box connector Mule ESB Integration
Box connector Mule ESB Integration
AnilKumar Etagowni
Simple REST with Dropwizard
Simple REST with Dropwizard
Andrei Savu
Dropwizard
Dropwizard
Scott Leberknight
Spring 4 final xtr_presentation
Spring 4 final xtr_presentation
sourabh aggarwal
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
mfrancis
Mule jdbc
Mule jdbc
KalaimathiS
From Open Source to Open API with Restlet
From Open Source to Open API with Restlet
Restlet
Dropwizard
Dropwizard
Tetiana Saputo
Spring.io
Spring.io
Cédric GILLET
Servlet Part 2
Servlet Part 2
vikram singh
Birhanu distributive assignment
Birhanu distributive assignment
university
Spring4 whats up doc?
Spring4 whats up doc?
David Gómez García
Managing user's data with Spring Session
Managing user's data with Spring Session
David Gómez García
Java Microservices with DropWizard
Java Microservices with DropWizard
Bruno Buger
SCWCD 1. get post - url (cap1 - cap2 )
SCWCD 1. get post - url (cap1 - cap2 )
Francesco Ierna
Spring 4 - A&BP CC
Spring 4 - A&BP CC
JWORKS powered by Ordina
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
jaxconf
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Codemotion
RESTFul Web Services - Intro
RESTFul Web Services - Intro
Manuel Correa
An introduction to consuming remote APIs with Drupal 7
An introduction to consuming remote APIs with Drupal 7
Josh Kopel
Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010
Rishu Mehra
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
Kevin Sutter
Spotify services - Leetspeak 2014
Spotify services - Leetspeak 2014
Niklas Gustavsson
Spotify services (SDC 2013)
Spotify services (SDC 2013)
Niklas Gustavsson
More Related Content
What's hot
Dropwizard
Dropwizard
Scott Leberknight
Spring 4 final xtr_presentation
Spring 4 final xtr_presentation
sourabh aggarwal
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
mfrancis
Mule jdbc
Mule jdbc
KalaimathiS
From Open Source to Open API with Restlet
From Open Source to Open API with Restlet
Restlet
Dropwizard
Dropwizard
Tetiana Saputo
Spring.io
Spring.io
Cédric GILLET
Servlet Part 2
Servlet Part 2
vikram singh
Birhanu distributive assignment
Birhanu distributive assignment
university
Spring4 whats up doc?
Spring4 whats up doc?
David Gómez García
Managing user's data with Spring Session
Managing user's data with Spring Session
David Gómez García
Java Microservices with DropWizard
Java Microservices with DropWizard
Bruno Buger
SCWCD 1. get post - url (cap1 - cap2 )
SCWCD 1. get post - url (cap1 - cap2 )
Francesco Ierna
Spring 4 - A&BP CC
Spring 4 - A&BP CC
JWORKS powered by Ordina
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
jaxconf
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Codemotion
RESTFul Web Services - Intro
RESTFul Web Services - Intro
Manuel Correa
An introduction to consuming remote APIs with Drupal 7
An introduction to consuming remote APIs with Drupal 7
Josh Kopel
Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010
Rishu Mehra
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
Kevin Sutter
What's hot
(20)
Dropwizard
Dropwizard
Spring 4 final xtr_presentation
Spring 4 final xtr_presentation
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
Mule jdbc
Mule jdbc
From Open Source to Open API with Restlet
From Open Source to Open API with Restlet
Dropwizard
Dropwizard
Spring.io
Spring.io
Servlet Part 2
Servlet Part 2
Birhanu distributive assignment
Birhanu distributive assignment
Spring4 whats up doc?
Spring4 whats up doc?
Managing user's data with Spring Session
Managing user's data with Spring Session
Java Microservices with DropWizard
Java Microservices with DropWizard
SCWCD 1. get post - url (cap1 - cap2 )
SCWCD 1. get post - url (cap1 - cap2 )
Spring 4 - A&BP CC
Spring 4 - A&BP CC
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
RESTFul Web Services - Intro
RESTFul Web Services - Intro
An introduction to consuming remote APIs with Drupal 7
An introduction to consuming remote APIs with Drupal 7
Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
Viewers also liked
Spotify services - Leetspeak 2014
Spotify services - Leetspeak 2014
Niklas Gustavsson
Spotify services (SDC 2013)
Spotify services (SDC 2013)
Niklas Gustavsson
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
Dan Mohl
Modern Software Architecture Styles and Patterns
Modern Software Architecture Styles and Patterns
Ganesh Samarthyam
The Modern Software Architect
The Modern Software Architect
Niels Bech Nielsen
Spotify architecture - Pressing play
Spotify architecture - Pressing play
Niklas Gustavsson
Spotify: Data center & Backend buildout
Spotify: Data center & Backend buildout
David Poblador i Garcia
Software Architecture Patterns
Software Architecture Patterns
Assaf Gannon
Big Data At Spotify
Big Data At Spotify
Adam Kawa
A Spotify Presentation - Case studies
A Spotify Presentation - Case studies
Emily Wilkinson
Algorithmic Music Recommendations at Spotify
Algorithmic Music Recommendations at Spotify
Chris Johnson
Music Recommendations at Scale with Spark
Music Recommendations at Scale with Spark
Chris Johnson
Scala Data Pipelines for Music Recommendations
Scala Data Pipelines for Music Recommendations
Chris Johnson
Interactive Recommender Systems with Netflix and Spotify
Interactive Recommender Systems with Netflix and Spotify
Chris Johnson
From Idea to Execution: Spotify's Discover Weekly
From Idea to Execution: Spotify's Discover Weekly
Chris Johnson
Viewers also liked
(15)
Spotify services - Leetspeak 2014
Spotify services - Leetspeak 2014
Spotify services (SDC 2013)
Spotify services (SDC 2013)
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
Modern Software Architecture Styles and Patterns
Modern Software Architecture Styles and Patterns
The Modern Software Architect
The Modern Software Architect
Spotify architecture - Pressing play
Spotify architecture - Pressing play
Spotify: Data center & Backend buildout
Spotify: Data center & Backend buildout
Software Architecture Patterns
Software Architecture Patterns
Big Data At Spotify
Big Data At Spotify
A Spotify Presentation - Case studies
A Spotify Presentation - Case studies
Algorithmic Music Recommendations at Spotify
Algorithmic Music Recommendations at Spotify
Music Recommendations at Scale with Spark
Music Recommendations at Scale with Spark
Scala Data Pipelines for Music Recommendations
Scala Data Pipelines for Music Recommendations
Interactive Recommender Systems with Netflix and Spotify
Interactive Recommender Systems with Netflix and Spotify
From Idea to Execution: Spotify's Discover Weekly
From Idea to Execution: Spotify's Discover Weekly
Similar to Oredev 2009 JAX-RS
REST made simple with Java
REST made simple with Java
elliando dias
REST
REST
Andreas Bjärlestam
RESTEasy
RESTEasy
Massimiliano Dessì
May 2010 - RestEasy
May 2010 - RestEasy
JBug Italy
Networking and Data Access with Eqela
Networking and Data Access with Eqela
jobandesther
Java Servlets
Java Servlets
BG Java EE Course
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
Geoffrey Fox
Java Technology
Java Technology
ifnu bima
Overview of RESTful web services
Overview of RESTful web services
nbuddharaju
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using Jersey
b_kathir
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
Yevgeniy Brikman
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with Sling
Felix Meschberger
Spring 4 Web App
Spring 4 Web App
Rossen Stoyanchev
RESTful web service with JBoss Fuse
RESTful web service with JBoss Fuse
ejlp12
CDI, Seam & RESTEasy: You haven't seen REST yet!
CDI, Seam & RESTEasy: You haven't seen REST yet!
Dan Allen
Using and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middleware
Alona Mekhovova
05 status-codes
05 status-codes
snopteck
112815 java ee8_davidd
112815 java ee8_davidd
Takashi Ito
RESTful Web Services with JAX-RS
RESTful Web Services with JAX-RS
Carol McDonald
JavaEE6 my way
JavaEE6 my way
Nicola Pedot
Similar to Oredev 2009 JAX-RS
(20)
REST made simple with Java
REST made simple with Java
REST
REST
RESTEasy
RESTEasy
May 2010 - RestEasy
May 2010 - RestEasy
Networking and Data Access with Eqela
Networking and Data Access with Eqela
Java Servlets
Java Servlets
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
Java Technology
Java Technology
Overview of RESTful web services
Overview of RESTful web services
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using Jersey
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with Sling
Spring 4 Web App
Spring 4 Web App
RESTful web service with JBoss Fuse
RESTful web service with JBoss Fuse
CDI, Seam & RESTEasy: You haven't seen REST yet!
CDI, Seam & RESTEasy: You haven't seen REST yet!
Using and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middleware
05 status-codes
05 status-codes
112815 java ee8_davidd
112815 java ee8_davidd
RESTful Web Services with JAX-RS
RESTful Web Services with JAX-RS
JavaEE6 my way
JavaEE6 my way
More from Niklas Gustavsson
Real-time web
Real-time web
Niklas Gustavsson
RESTful web services
RESTful web services
Niklas Gustavsson
Not only SQL
Not only SQL
Niklas Gustavsson
HTML5
HTML5
Niklas Gustavsson
The future is bright
The future is bright
Niklas Gustavsson
CouchDB
CouchDB
Niklas Gustavsson
Apachecon Eu 2008 Mina
Apachecon Eu 2008 Mina
Niklas Gustavsson
More from Niklas Gustavsson
(7)
Real-time web
Real-time web
RESTful web services
RESTful web services
Not only SQL
Not only SQL
HTML5
HTML5
The future is bright
The future is bright
CouchDB
CouchDB
Apachecon Eu 2008 Mina
Apachecon Eu 2008 Mina
Recently uploaded
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
Server-Driven User Interface (SDUI) at Priceline
Server-Driven User Interface (SDUI) at Priceline
UXDXConf
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
Stefano
Motion for AI: Creating Empathy in Technology
Motion for AI: Creating Empathy in Technology
UXDXConf
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
Stephanie Beckett
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
CzechDreamin
Transforming The New York Times: Empowering Evolution through UX
Transforming The New York Times: Empowering Evolution through UX
UXDXConf
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
CzechDreamin
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Julian Hyde
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
IES VE
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
CzechDreamin
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
Jennifer Lim
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
Zilliz
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdf
ChristopherTHyatt
Intelligent Gimbal FINAL PAPER Engineering.pdf
Intelligent Gimbal FINAL PAPER Engineering.pdf
Anthony Lucente
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
IoTAnalytics
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
confluent
Recently uploaded
(20)
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
Server-Driven User Interface (SDUI) at Priceline
Server-Driven User Interface (SDUI) at Priceline
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
Motion for AI: Creating Empathy in Technology
Motion for AI: Creating Empathy in Technology
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Transforming The New York Times: Empowering Evolution through UX
Transforming The New York Times: Empowering Evolution through UX
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdf
Intelligent Gimbal FINAL PAPER Engineering.pdf
Intelligent Gimbal FINAL PAPER Engineering.pdf
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
Oredev 2009 JAX-RS
1.
SDC 2008
REST made simple with Java
2.
Niklas Gustavsson [email_address]
http://protocol7.com http://twitter.com/protocol7
3.
REST made simple
with Java
4.
REST?
5.
HTTP 1.1
6.
Some HTTP history
7.
Some HTTP history
8.
HTTP used right
9.
Constraints
10.
Constraints Everything is
a resource
11.
Constraints A resource
has an identifier http://example.com/reports/niklas
12.
Constraints We transfer
representations
13.
Constraints All resources
expose a uniform interface GET, POST, PUT, DELETE
14.
Constraints Hypermedia as
the engine of application state
15.
Constraints Client-server, Stateless,
Cacheable, Layered
16.
Why?
17.
Why? It's easy!
Well, it's not
18.
Why? It's what
the cool kids use
19.
Why? Web has
been successful, copy!
20.
Why? It's what
others use
21.
Why? Interoperability on
the right level
22.
Frameworks!
23.
JAX-RS (aka JSR-311)
24.
Jersey http://jersey.dev.java.net
Restlets http://www.restlet.org RESTeasy http://www.jboss.org/resteasy CXF http://cxf.apache.org
25.
POJO based Annotation
heavy
26.
Resources
27.
Code! Show me
the code!
28.
public class TimeReportService
{ private TimeReportDao reportDao; public TimeReport getReport(String username) { return reportDao.forUser(username); } public void saveReport(TimeReport report) { reportDao.update(report); } ... }
29.
Request mapping
30.
31.
@Path("reports") public class
TimeReportService { private TimeReportDao reportDao; @GET public TimeReport getReport(String username) { return reportDao.forUser(username); } @PUT public void saveReport(TimeReport report) { reportDao.update(report); } ... }
32.
Parameters
33.
@Path("reports/ {username} ")
public class TimeReportService { @GET public TimeReport getReport(@PathParam("username") String username) { return reportDao.forUser(username); } ... } http://example.com/report/ niklas
34.
@GET public TimeReport
getReport(@Context SecurityContext sc) { if(sc.isSecure()) { Principal user = sc.getUserPrincipal(); return reportDao.forUser(user.getName()); } else { ... throw error, redirect to login } }
35.
@GET public TimeReport
getReport(@CookieParam("username") String username) { return reportDao.forUser(username); }
36.
Any media type
is allowed XML, JSON, text/plain, binary, ...
37.
Entity providers MessageBodyReader,
MessageBodyWriter
38.
39.
Standard Entity providers
40.
Writing your own
Entity provider
41.
BEGIN:VEVENT DTSTART:20091102T080000Z DTEND:20091106T170000Z
SUMMARY:OREDEV END:VEVENT
42.
@Provider @Produces("text/calendar") public
class TimeReportICalWriter implements MessageBodyWriter<TimeReport> { public void writeTo(TimeReport t, Class<?> type, Type genericType,Annotation[] annotations,MediaType mediaType,MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) { PrintWriter wr = new PrintWriter(entityStream); ... for(TimeRange range : t.getRanges()) { wr.println("BEGIN:VEVENT"); wr.println("DTSTART:" + DF.format(range.getStartTime())); wr.println("DTEND:" + DF.format(range.getEndTime())); wr.println("SUMMARY:" + range.getDescription()); wr.println("END:VEVENT"); } ... }
43.
Request Response ResponseBuilder
44.
Exception Mapping
45.
Application
46.
47.
public class TimeReportApplication
extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes .add(TimeReportService.class); classes .add(TimeReportICalWriter.class); return classes ; } }
48.
Deployment
49.
JAX-RS limitations
50.
JAX-RS limitations Lifecycle
support
51.
JAX-RS limitations Conneg
only http://example.com/report http://example.com/report.xml http://example.com/report.cal http://example.com/report.json
52.
JAX-RS limitations Limited
security support
53.
JAX-RS limitations Leaky
abstraction
54.
JAX-RS limitations Weak
support for links
55.
Try it out!
And have a look at the alternatives
56.
Want more? http://github.com/protocol7/jax-rs-demo
57.
Want more?
58.
Questions?
59.
[email_address]
60.
Attributions http://www.flickr.com/photos/psd/421186578/ http://www.flickr.com/photos/sineout/2491569707/
http://www.flickr.com/photos/apelad/sets/72157594388426362/ http://www.flickr.com/photos/goopymart/289959670
Editor's Notes
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
From Göteborg Callista
Download now