diff --git a/pom.xml b/pom.xml
index dffeda1..607b42f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,10 +9,11 @@
UTF-8
- 8
- 8
- 2.28
- 2.9.6
+ 11
+ 11
+ 3.0.4
+ 20210307
+ 5.0.0
@@ -31,11 +32,12 @@
+
+
- javax.servlet
- javax.servlet-api
- 4.0.1
- provided
+ jakarta.servlet
+ jakarta.servlet-api
+ ${servlet.api.version}
@@ -67,30 +69,51 @@
org.glassfish.jersey.media
jersey-media-sse
+
+ org.glassfish.jersey.media
+ jersey-media-jaxb
+
+
+
+
+
+
+ org.json
+ json
+ ${org.json.version}
+
- javax.xml.bind
- jaxb-api
- 2.2.11
-
-
- com.sun.xml.bind
- jaxb-core
- 2.2.11
-
-
- com.sun.xml.bind
- jaxb-impl
- 2.2.11
-
-
- javax.activation
- activation
- 1.1.1
-
-
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ 3.0.1
+
+
+ com.sun.xml.bind
+ jaxb-impl
+ 3.0.1
+ runtime
+
+
+
+
+ org.eclipse.persistence
+ org.eclipse.persistence.moxy
+ 3.0.0
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.3.1
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/fr/istic/chat/message/Message.java b/src/main/java/fr/istic/chat/message/Message.java
new file mode 100644
index 0000000..2adf067
--- /dev/null
+++ b/src/main/java/fr/istic/chat/message/Message.java
@@ -0,0 +1,41 @@
+package fr.istic.chat.message;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+
+public class Message {
+
+ private Long id;
+ private String content;
+ private String date;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ @Override
+ public String toString() {
+ return id + ":" + date + ">" + content;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/chat/message/MessageList.java b/src/main/java/fr/istic/chat/message/MessageList.java
new file mode 100644
index 0000000..dfd1b2e
--- /dev/null
+++ b/src/main/java/fr/istic/chat/message/MessageList.java
@@ -0,0 +1,86 @@
+package fr.istic.chat.message;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class MessageList {
+
+ private static MessageList INSTANCE = new MessageList();
+
+ public static final MessageList getInstance() {
+ return INSTANCE;
+ }
+
+ private static long CURRENT_ID = 0;
+
+ private synchronized static Long getNextID() {
+ return CURRENT_ID++;
+ }
+
+ public synchronized static Long getHighestID() {
+ return CURRENT_ID;
+ }
+
+ /* L'utilisation d'un bloc static est une très mauvaise idée de façon générale.
+ * Ce code est appelé au chargement de la classe par le Classloader
+ * On l'utilise ici pour remplir les messages :
+ */
+ static {
+
+ Message m = new Message();
+ m.setContent("ceci est un test");
+ INSTANCE.createMessage(m);
+
+ m = new Message();
+ m.setContent("test 2");
+ INSTANCE.createMessage(m);
+
+ m = new Message();
+ m.setContent("test 3");
+ INSTANCE.createMessage(m);
+
+ }
+
+ private Map messagesMap = new HashMap();
+
+ public synchronized Message createMessage(Message message) {
+ message.setId(getNextID());
+ message.setDate(new Date().toString());
+ messagesMap.put(message.getId(), message);
+ return message;
+ }
+
+ public synchronized Message getMessage(Long id) {
+ return messagesMap.get(id);
+ }
+
+ public synchronized void delMessage(Long id) {
+ messagesMap.remove(id);
+ }
+
+ public synchronized List getMessages() {
+ return new ArrayList(messagesMap.values());
+ }
+
+ public synchronized List getMessagesBetween(Long id1, Long id2) {
+ List messages = new ArrayList();
+ for (Long i = id1; i <= id2; i++) {
+ messages.add(messagesMap.get(i));
+ }
+ return messages;
+ }
+
+ public synchronized List getMessagesAfter(Long id1) {
+ List messages = new ArrayList();
+ for (Long i = id1; i <= getHighestID(); i++) {
+ if (messagesMap.containsKey(i)) {
+ messages.add(messagesMap.get(i));
+ }
+ }
+ return messages;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/rest/Hello.java b/src/main/java/fr/istic/rest/Hello.java
index 357ee9d..7c08fd0 100644
--- a/src/main/java/fr/istic/rest/Hello.java
+++ b/src/main/java/fr/istic/rest/Hello.java
@@ -1,11 +1,11 @@
package fr.istic.rest;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.xml.bind.annotation.XmlRootElement;
@Path("/hello")
public class Hello {
@@ -18,7 +18,7 @@ public class Hello {
@Path("/{name}")
@GET
- @Produces(MediaType.APPLICATION_JSON)
+ @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public Message getDescription(@PathParam("name") String name) {
Message m = new Message();
m.name = name;
diff --git a/src/main/java/fr/istic/rest/MessageRessource.java b/src/main/java/fr/istic/rest/MessageRessource.java
new file mode 100644
index 0000000..120e5d1
--- /dev/null
+++ b/src/main/java/fr/istic/rest/MessageRessource.java
@@ -0,0 +1,26 @@
+package fr.istic.rest;
+
+import java.util.List;
+
+import fr.istic.chat.message.Message;
+import fr.istic.chat.message.MessageList;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.xml.bind.JAXBElement;
+
+public class MessageRessource {
+
+ @Path("/after/{id}")
+ @GET
+ @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
+ public List getMessagesAfter(@PathParam("id") Long id){
+ System.out.println("message after" + id);
+ return MessageList.getInstance().getMessagesAfter(id);
+ }
+
+}
diff --git a/src/main/java/fr/istic/servlet/HelloServlet.java b/src/main/java/fr/istic/servlet/HelloServlet.java
index 8247cdd..04056cc 100644
--- a/src/main/java/fr/istic/servlet/HelloServlet.java
+++ b/src/main/java/fr/istic/servlet/HelloServlet.java
@@ -3,15 +3,15 @@ package fr.istic.servlet;
import java.io.IOException;
import java.io.PrintWriter;
-import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.xml.bind.annotation.XmlRootElement;
@WebServlet("/client")
public class HelloServlet extends HttpServlet {
@@ -30,10 +30,6 @@ public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
- // Ceci n'est utile que pour JAXB 2.3.1 et disparaitra plus tard :
- System.setProperty("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize",
- "true");
-
PrintWriter out = resp.getWriter();
resp.setContentType("text/plain");
try {
diff --git a/src/main/java/test/TestApi.java b/src/main/java/test/TestApi.java
new file mode 100644
index 0000000..661e040
--- /dev/null
+++ b/src/main/java/test/TestApi.java
@@ -0,0 +1,42 @@
+package test;
+
+
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+public class TestApi {
+
+ //TODO : Adapter l'URL en fonction de votre resource :
+ public static final String URL = "http://localhost:8080/pr.tp.services/api";
+
+ @XmlRootElement(name="message")
+ public static class ChatMessage {
+ public Long id;
+ public String content;
+ public String date;
+ @Override
+ public String toString() {
+ return id + ":" + content+ " at "+ date;
+ }
+ }
+
+ public static void main(String[] args) {
+ Client client = ClientBuilder.newClient();
+
+ //Post a message :
+ ChatMessage m = new ChatMessage();
+ m.content="test";
+ Response response = client.target(URL).path("messages").request(MediaType.APPLICATION_JSON_TYPE).post(Entity.entity(m, MediaType.APPLICATION_XML));
+ System.out.println("Response "+ response.getStatus());
+
+ //Get all the messages
+ ChatMessage[] messages = client.target(URL).path("messages").request(MediaType.APPLICATION_JSON_TYPE).get(ChatMessage[].class);
+ for (ChatMessage chatMessage : messages) {
+ System.out.println(chatMessage);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 6905f59..3a78c27 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -1,10 +1,7 @@
-
+
Jersey Web Application
org.glassfish.jersey.servlet.ServletContainer