Skip to content

Commit 3fb4537

Browse files
navuluriBhaskara Navuluri
andauthored
Added code for BAEL-1355 (eugenp#11908)
* Added code for BAEL-1355 * Formatted the code * Added jakarta-ee to parent pom Co-authored-by: Bhaskara Navuluri <[email protected]>
1 parent c4e4f5e commit 3fb4537

File tree

11 files changed

+637
-42
lines changed

11 files changed

+637
-42
lines changed

jakarta-ee/pom.xml

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>com.baeldung</groupId>
6+
<artifactId>mvc-2.0</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<packaging>war</packaging>
9+
10+
<name>mvc-2.0</name>
11+
12+
<properties>
13+
<jakartaee-api.version>9.0.0</jakartaee-api.version>
14+
<krazo.version>2.0.0</krazo.version>
15+
<jakarta.mvc-api.version>2.0.0</jakarta.mvc-api.version>
16+
<junit.jupiter.version>5.8.2</junit.jupiter.version>
17+
<local.glassfish.home>C:/glassfish6</local.glassfish.home>
18+
<local.glassfish.user>admin</local.glassfish.user>
19+
<local.glassfish.domain>mvn-domain</local.glassfish.domain>
20+
<mockito.version>1.10.19</mockito.version>
21+
<local.glassfish.passfile>
22+
${local.glassfish.home}\\domains\\${local.glassfish.domain}\\config\\domain-passwords
23+
</local.glassfish.passfile>
24+
</properties>
25+
26+
<dependencies>
27+
<dependency>
28+
<groupId>jakarta.platform</groupId>
29+
<artifactId>jakarta.jakartaee-web-api</artifactId>
30+
<version>${jakartaee-api.version}</version>
31+
<scope>provided</scope>
32+
</dependency>
33+
34+
<dependency>
35+
<groupId>jakarta.mvc</groupId>
36+
<artifactId>jakarta.mvc-api</artifactId>
37+
<version>${jakarta.mvc-api.version}</version>
38+
</dependency>
39+
40+
<dependency>
41+
<groupId>org.eclipse.krazo</groupId>
42+
<artifactId>krazo-jersey</artifactId>
43+
<version>${krazo.version}</version>
44+
</dependency>
45+
<dependency>
46+
<groupId>org.junit.jupiter</groupId>
47+
<artifactId>junit-jupiter-api</artifactId>
48+
<version>${junit.jupiter.version}</version>
49+
<scope>test</scope>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.mockito</groupId>
53+
<artifactId>mockito-all</artifactId>
54+
<version>${mockito.version}</version>
55+
<scope>test</scope>
56+
</dependency>
57+
58+
</dependencies>
59+
60+
<build>
61+
<finalName>mvc-2.0</finalName>
62+
<plugins>
63+
<plugin>
64+
<groupId>org.glassfish.maven.plugin</groupId>
65+
<artifactId>maven-glassfish-plugin</artifactId>
66+
<version>2.1</version>
67+
<configuration>
68+
<glassfishDirectory>${local.glassfish.home}</glassfishDirectory>
69+
<user>admin</user>
70+
<!-- <passwordFile>${local.glassfish.passfile}</passwordFile>-->
71+
<adminPassword>password</adminPassword>
72+
73+
<domain>
74+
<name>${local.glassfish.domain}</name>
75+
<httpPort>8080</httpPort>
76+
<adminPort>4848</adminPort>
77+
78+
</domain>
79+
<components>
80+
<component>
81+
<name>${project.artifactId}</name>
82+
<artifact>target/${project.build.finalName}.war</artifact>
83+
84+
</component>
85+
</components>
86+
<debug>true</debug>
87+
<terse>false</terse>
88+
<echo>true</echo>
89+
90+
91+
</configuration>
92+
</plugin>
93+
<plugin>
94+
<groupId>org.apache.maven.plugins</groupId>
95+
<artifactId>maven-compiler-plugin</artifactId>
96+
<version>3.8.0</version>
97+
<configuration>
98+
<source>1.8</source>
99+
<target>1.8</target>
100+
</configuration>
101+
</plugin>
102+
<plugin>
103+
<groupId>org.apache.maven.plugins</groupId>
104+
<artifactId>maven-war-plugin</artifactId>
105+
<configuration>
106+
<failOnMissingWebXml>false</failOnMissingWebXml>
107+
</configuration>
108+
</plugin>
109+
</plugins>
110+
</build>
111+
</project>
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.baeldung.eclipse.krazo;
2+
3+
import jakarta.enterprise.context.RequestScoped;
4+
import jakarta.inject.Named;
5+
import jakarta.mvc.RedirectScoped;
6+
import jakarta.mvc.binding.MvcBinding;
7+
import jakarta.validation.constraints.Email;
8+
import jakarta.validation.constraints.Min;
9+
import jakarta.validation.constraints.NotNull;
10+
import jakarta.validation.constraints.Null;
11+
import jakarta.validation.constraints.Size;
12+
import jakarta.ws.rs.FormParam;
13+
14+
import java.io.Serializable;
15+
16+
@Named("user")
17+
@RedirectScoped
18+
public class User implements Serializable {
19+
@MvcBinding
20+
@Null
21+
private String id;
22+
23+
@MvcBinding
24+
@NotNull
25+
@Size(min = 1, message = "Name cannot be blank")
26+
@FormParam("name")
27+
private String name;
28+
29+
@MvcBinding
30+
@Min(value = 18, message = "The minimum age of the user should be 18 years")
31+
@FormParam("age")
32+
private int age;
33+
34+
@MvcBinding
35+
@Email(message = "The email cannot be blank and should be in a valid format")
36+
@Size(min=3, message = "Email cannot be empty")
37+
@FormParam("email")
38+
private String email;
39+
40+
@MvcBinding
41+
@Null
42+
@FormParam("phone")
43+
private String phone;
44+
45+
public String getId() {
46+
return id;
47+
}
48+
49+
public void setId(String id) {
50+
this.id = id;
51+
}
52+
53+
public String getName() {
54+
return name;
55+
}
56+
57+
public void setName(String name) {
58+
this.name = name;
59+
}
60+
61+
public int getAge() {
62+
return age;
63+
}
64+
65+
public void setAge(int age) {
66+
this.age = age;
67+
}
68+
69+
public String getEmail() {
70+
return email;
71+
}
72+
73+
public void setEmail(String email) {
74+
this.email = email;
75+
}
76+
77+
public String getPhone() {
78+
return phone;
79+
}
80+
81+
public void setPhone(String phone) {
82+
this.phone = phone;
83+
}
84+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.baeldung.eclipse.krazo;
2+
3+
import jakarta.ws.rs.ApplicationPath;
4+
import jakarta.ws.rs.core.Application;
5+
6+
/**
7+
* Default JAX-RS application listening on /app
8+
*/
9+
@ApplicationPath("/app")
10+
public class UserApplication extends Application {
11+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.baeldung.eclipse.krazo;
2+
3+
import jakarta.inject.Inject;
4+
import jakarta.mvc.Controller;
5+
import jakarta.mvc.Models;
6+
import jakarta.mvc.binding.BindingResult;
7+
import jakarta.mvc.security.CsrfProtected;
8+
import jakarta.validation.Valid;
9+
import jakarta.ws.rs.BeanParam;
10+
import jakarta.ws.rs.GET;
11+
import jakarta.ws.rs.POST;
12+
import jakarta.ws.rs.Path;
13+
import jakarta.ws.rs.Produces;
14+
import jakarta.ws.rs.core.MediaType;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
import java.util.UUID;
19+
20+
/**
21+
* The class contains two controllers and a REST API
22+
*/
23+
@Path("users")
24+
public class UserController {
25+
@Inject
26+
private BindingResult bindingResult;
27+
28+
private static final List<User> users = new ArrayList<>();
29+
30+
@Inject
31+
private Models models;
32+
33+
/**
34+
* This is a controller. It displays a initial form to the user.
35+
* @return The view name
36+
*/
37+
@GET
38+
@Controller
39+
public String showForm() {
40+
return "user.jsp";
41+
}
42+
43+
/**
44+
* The method handles the form submits
45+
* Handles HTTP POST and is CSRF protected. The client invoking this controller should provide a CSRF token.
46+
* @param user The user details that has to be stored
47+
* @return Returns a view name
48+
*/
49+
@POST
50+
@Controller
51+
@CsrfProtected
52+
public String saveUser(@Valid @BeanParam User user) {
53+
if (bindingResult.isFailed()) {
54+
models.put("errors", bindingResult.getAllErrors());
55+
return "user.jsp";
56+
}
57+
String id = UUID.randomUUID().toString();
58+
user.setId(id);
59+
users.add(user);
60+
return "redirect:users/success";
61+
}
62+
63+
/**
64+
* Handles a redirect view
65+
* @return The view name
66+
*/
67+
@GET
68+
@Controller
69+
@Path("success")
70+
public String saveUserSuccess() {
71+
return "success.jsp";
72+
}
73+
74+
/**
75+
* The REST API that returns all the user details in the JSON format
76+
* @return The list of users that are saved. The List<User> is converted into Json Array.
77+
* If no user is present a empty array is returned
78+
*/
79+
@GET
80+
@Produces(MediaType.APPLICATION_JSON)
81+
public List<User> getUsers() {
82+
return users;
83+
}
84+
85+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
5+
bean-discovery-mode="all" version="3.0">
6+
</beans>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
2+
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3+
<html lang="en">
4+
<head>
5+
<meta charset="UTF-8">
6+
<title>MVC 2.0</title>
7+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
8+
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
9+
10+
<link rel="preconnect" href="https://fonts.googleapis.com">
11+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12+
<link href="https://fonts.googleapis.com/css2?family=Raleway:wght@100;200;300;600&display=swap" rel="stylesheet">
13+
<link rel="stylesheet" href="${pageContext.request.contextPath}/styles.css">
14+
15+
</head>
16+
<body>
17+
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
18+
<div class="container-fluid">
19+
<span class="navbar-brand" href="#"><span style="font-size: 24px;">Baeldung - Eclipse Krazo</span></span>
20+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"
21+
aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
22+
<span class="navbar-toggler-icon"></span>
23+
</button>
24+
25+
</div>
26+
</nav>
27+
<div class="container">
28+
<div class="row align-items-center">
29+
<div class="col-sm-7 mx-auto">
30+
<div class="card">
31+
32+
<div class="card-body">
33+
<h3 class="card-title text-success">User created successfully!</h3>
34+
</div>
35+
</div>
36+
37+
</div>
38+
39+
</div>
40+
</div>
41+
42+
43+
</body>
44+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
45+
integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
46+
47+
</html>

0 commit comments

Comments
 (0)