RESTEasy is JBOSS provided implementation of JAX-RS specification for building RESTful Web Services and RESTful Java applications. Though this is not limited to be used in JBOSS only, and you can use with other servers also. In this post, I am building such a hello world application in JBOSS AS7 server.
Environment used:
Follow below steps to build a demo application.
1) Create a maven project and convert to eclipse web project
mvn archetype:generate -DgroupId=com.howtodoinjava -DartifactId=RESTfulDemoApplication -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false mvn eclipse:eclipse -Dwtpversion=2.0
2) Update runtime dependencies in pom.xml
You need to define only compile time dependencies. Even better, if you can identify and include the jars from jboss distribution package.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
<
modelVersion
>4.0.0</
modelVersion
>
<
groupId
>com.howtodoinjava</
groupId
>
<
artifactId
>RESTfulDemoApplication</
artifactId
>
<
packaging
>war</
packaging
>
<
version
>1.0-SNAPSHOT</
version
>
<
name
>RESTfulDemoApplication Maven Webapp</
name
>
<
repositories
>
<
repository
>
<
id
>jboss</
id
>
</
repository
>
</
repositories
>
<
dependencies
>
<
dependency
>
<
groupId
>junit</
groupId
>
<
artifactId
>junit</
artifactId
>
<
version
>3.8.1</
version
>
<
scope
>test</
scope
>
</
dependency
>
<!-- core library -->
<
dependency
>
<
groupId
>org.jboss.resteasy</
groupId
>
<
artifactId
>resteasy-jaxrs</
artifactId
>
<
version
>2.3.1.GA</
version
>
<
scope
>compile</
scope
>
</
dependency
>
<!-- JAXB support -->
<
dependency
>
<
groupId
>org.jboss.resteasy</
groupId
>
<
artifactId
>resteasy-jaxb-provider</
artifactId
>
<
version
>2.3.1.GA</
version
>
<
scope
>compile</
scope
>
</
dependency
>
<!-- multipart/form-data and multipart/mixed support -->
<
dependency
>
<
groupId
>org.jboss.resteasy</
groupId
>
<
artifactId
>resteasy-multipart-provider</
artifactId
>
<
version
>2.3.1.GA</
version
>
<
scope
>compile</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>net.sf.scannotation</
groupId
>
<
artifactId
>scannotation</
artifactId
>
<
version
>1.0.2</
version
>
<
scope
>compile</
scope
>
</
dependency
>
</
dependencies
>
<
build
>
<
finalName
>RESTfulDemoApplication</
finalName
>
</
build
>
</
project
>
|
3) Create a blank web.xml file
JBOSS’s inbuilt support RESTeasy makes it a perfect combo for RESTFul web application. The minimum configuration to build such application is none. Yes, a blank web.xml file.
1
2
3
4
5
6
7
|
<!
DOCTYPE
web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
<
web-app
>
<
display-name
>Restful Web Application</
display-name
>
</
web-app
>
|
5) Register the application path
You will need to extend javax.ws.rs.core.Application class and provide @ApplicationPath annotation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<img src=
"http://howtodoinjava.com/wp-content/uploads/jboss+resteasy1.png"
alt=
"JBOSS 7+ RESTEasy demo application"
width=
"453"
height=
"225"
class
=
"size-full wp-image-2033"
/> JBOSS
7
+ RESTEasy demo applicationpackage com.howtodoinjava;
import
java.util.Arrays;
import
java.util.HashSet;
import
java.util.Set;
import
javax.ws.rs.ApplicationPath;
import
javax.ws.rs.core.Application;
import
com.howtodoinjava.service.UserService;
@ApplicationPath
(
"/"
)
public
class
ApplicationConfig
extends
Application {
@SuppressWarnings
(
"unchecked"
)
public
Set<Class<?>> getClasses() {
return
new
HashSet<Class<?>>(Arrays.asList(UserService.
class
));
}
}
|
4) Write a service class having @Path annotations
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
package
com.howtodoinjava.service;
import
java.net.URI;
import
java.net.URISyntaxException;
import
java.util.ArrayList;
import
javax.ws.rs.Consumes;
import
javax.ws.rs.DELETE;
import
javax.ws.rs.DefaultValue;
import
javax.ws.rs.GET;
import
javax.ws.rs.POST;
import
javax.ws.rs.PUT;
import
javax.ws.rs.Path;
import
javax.ws.rs.PathParam;
import
javax.ws.rs.Produces;
import
javax.ws.rs.QueryParam;
import
javax.ws.rs.core.Response;
import
javax.xml.bind.annotation.XmlAccessType;
import
javax.xml.bind.annotation.XmlAccessorType;
import
javax.xml.bind.annotation.XmlElement;
import
javax.xml.bind.annotation.XmlRootElement;
import
com.howtodoinjava.model.User;
import
com.howtodoinjava.model.Users;
@XmlAccessorType
(XmlAccessType.NONE)
@XmlRootElement
(name =
"user-management"
)
@Path
(
"/user-management"
)
public
class
UserService {
@XmlElement
(name =
"users"
)
private
String uri1 =
"/user-management/users"
;
@XmlElement
(name =
"report"
)
private
String uri2 =
"/user-managemet/generate-report"
;
public
String getUri1() {
return
uri1;
}
public
void
setUri1(String uri1) {
this
.uri1 = uri1;
}
public
String getUri2() {
return
uri2;
}
public
void
setUri2(String uri2) {
this
.uri2 = uri2;
}
@GET
@Path
(
"/"
)
@Produces
(
"application/vnd.com.demo.user-management+xml;charset=UTF-8;version=1"
)
public
UserService getServiceInfo() {
return
new
UserService();
}
@GET
@Path
(
"/users"
)
@Produces
(
"application/vnd.com.demo.user-management.users+xml;charset=UTF-8;version=1"
)
public
Users getAllUsers() {
User user1 =
new
User();
user1.setId(
1
);
user1.setFirstName(
"demo"
);
user1.setLastName(
"user"
);
user1.setUri(
"/user-management/users/1"
);
User user2 =
new
User();
user2.setId(
2
);
user2.setFirstName(
"demo"
);
user2.setLastName(
"user"
);
user2.setUri(
"/user-management/users/2"
);
Users users =
new
Users();
users.setUsers(
new
ArrayList<User>());
users.getUsers().add(user1);
users.getUsers().add(user2);
return
users;
}
@GET
@Path
(
"/users/{id}"
)
@Produces
(
"application/vnd.com.demo.user-management.user+xml;charset=UTF-8;version=1"
)
public
User getUserById(
@PathParam
(
"id"
)
int
id) {
User user =
new
User();
user.setId(id);
user.setFirstName(
"demo"
);
user.setLastName(
"user"
);
user.setUri(
"/user-management/users/"
+ id);
return
user;
}
@POST
@Path
(
"/users"
)
@Consumes
(
"application/vnd.com.demo.user-management.user+xml;charset=UTF-8;version=1"
)
public
Response createUser(User user,
@DefaultValue
(
"false"
)
@QueryParam
(
"allow-admin"
)
boolean
allowAdmin)
throws
URISyntaxException {
System.out.println(user.getFirstName());
System.out.println(user.getLastName());
return
Response.status(
201
)
.contentLocation(
new
URI(
"/user-management/users/123"
)).build();
}
@PUT
// @Path("/users/{id: [0-9]*}")
@Path
(
"/users/{id}"
)
@Consumes
(
"application/vnd.com.demo.user-management.user+xml;charset=UTF-8;version=1"
)
@Produces
(
"application/vnd.com.demo.user-management.user+xml;charset=UTF-8;version=1"
)
public
User updateUser(
@PathParam
(
"id"
)
int
id, User user)
throws
URISyntaxException {
user.setId(id);
user.setFirstName(user.getFirstName() +
"updated"
);
return
user;
}
@DELETE
@Path
(
"/users/{id}"
)
public
Response deleteUser(
@PathParam
(
"id"
)
int
id)
throws
URISyntaxException {
return
Response.status(
200
).build();
}
}
|
5) Run the application
When we deploy above built application in jboss and hit the URL: ” http://localhost:8080/RESTfulDemoApplication/user-management/users”, below is the response.
reference from:http://howtodoinjava.com/2013/05/12/resteasy-jboss-7-hello-world-application/