STEPAN_KODER_228

Untitled

May 22nd, 2023
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.04 KB | None | 0 0
  1. To serialize and deserialize the `ClientMessage` class using DOM parser, you can use the following implementation:
  2.  
  3. ```java
  4. import org.w3c.dom.Document;
  5. import org.w3c.dom.Element;
  6. import org.w3c.dom.NodeList;
  7.  
  8. import javax.xml.parsers.DocumentBuilder;
  9. import javax.xml.parsers.DocumentBuilderFactory;
  10. import javax.xml.parsers.ParserConfigurationException;
  11. import java.io.StringWriter;
  12.  
  13. public class ClientMessageSerializer {
  14.  
  15. public static String serialize(ClientMessage message) throws ParserConfigurationException {
  16. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  17. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  18. Document document = documentBuilder.newDocument();
  19.  
  20. Element rootElement = document.createElement("command");
  21. rootElement.setAttribute("name", message.getName());
  22.  
  23. switch (message.getType()) {
  24. case Command -> serializeCommandMessage(document, rootElement, message);
  25. case Event -> serializeEventMessage(document, rootElement, message);
  26. }
  27.  
  28. document.appendChild(rootElement);
  29.  
  30. StringWriter writer = new StringWriter();
  31. try {
  32. XmlUtil.writeDocument(document, writer);
  33. } catch (Exception e) {
  34. throw new RuntimeException(e);
  35. }
  36.  
  37. return writer.toString();
  38. }
  39.  
  40. private static void serializeCommandMessage(Document document, Element rootElement, ClientMessage message) {
  41. if (message instanceof ClientMessage.LoginRequest) {
  42. ClientMessage.LoginRequest loginRequest = (ClientMessage.LoginRequest) message;
  43. Element nameElement = document.createElement("name");
  44. nameElement.setTextContent(loginRequest.getUserName());
  45. rootElement.appendChild(nameElement);
  46. } else if (message instanceof ClientMessage.Message) {
  47. ClientMessage.Message messageCommand = (ClientMessage.Message) message;
  48. Element messageElement = document.createElement("message");
  49. messageElement.setTextContent(messageCommand.getMessageText());
  50. Element sessionElement = document.createElement("session");
  51. sessionElement.setTextContent(String.valueOf(messageCommand.getSessionID()));
  52. rootElement.appendChild(messageElement);
  53. rootElement.appendChild(sessionElement);
  54. } else if (message instanceof ClientMessage.Logout) {
  55. ClientMessage.Logout logoutCommand = (ClientMessage.Logout) message;
  56. Element sessionElement = document.createElement("session");
  57. sessionElement.setTextContent(String.valueOf(logoutCommand.getSessionID()));
  58. rootElement.appendChild(sessionElement);
  59. } else if (message instanceof ClientMessage.ListMembers) {
  60. ClientMessage.ListMembers listMembersCommand = (ClientMessage.ListMembers) message;
  61. Element sessionElement = document.createElement("session");
  62. sessionElement.setTextContent(String.valueOf(listMembersCommand.getSessionID()));
  63. rootElement.appendChild(sessionElement);
  64. }
  65. }
  66.  
  67. private static void serializeEventMessage(Document document, Element rootElement, ClientMessage message) {
  68. // Not implemented in the example
  69. }
  70.  
  71. public static ClientMessage deserialize(String xml) throws Exception {
  72. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  73. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  74.  
  75. // Create an InputSource from the XML string
  76. InputSource inputSource = new InputSource(new StringReader(xml));
  77.  
  78. Document document = documentBuilder.parse(inputSource);
  79.  
  80. Element rootElement = document.getDocumentElement();
  81. String commandName = rootElement.getAttribute("name");
  82.  
  83. switch (commandName) {
  84. case "login" -> {
  85. String userName = getElementTextContent(rootElement, "name");
  86. return new ClientMessage.LoginRequest(userName);
  87. }
  88. case "message" -> {
  89. String messageText = getElementTextContent(rootElement, "message");
  90. int sessionID = Integer.parseInt(getElementTextContent(rootElement, "session"));
  91. return new ClientMessage.Message(sessionID, messageText);
  92. }
  93. case "logout" -> {
  94. int sessionID = Integer.parseInt(getElementTextContent(rootElement, "session"));
  95. return new ClientMessage.Logout(sessionID);
  96. }
  97. case "list" -> {
  98. int sessionID = Integer.parseInt(get
  99.  
  100. ElementTextContent(rootElement, "session"));
  101. return new ClientMessage.ListMembers(sessionID);
  102. }
  103. }
  104.  
  105. throw new IllegalArgumentException("Invalid XML structure.");
  106. }
  107.  
  108. private static String getElementTextContent(Element element, String tagName) {
  109. NodeList nodeList = element.getElementsByTagName(tagName);
  110. if (nodeList.getLength() > 0) {
  111. return nodeList.item(0).getTextContent();
  112. }
  113. return null;
  114. }
  115.  
  116. public static void main(String[] args) throws Exception {
  117. // Example serialization
  118. ClientMessage.LoginRequest loginRequest = new ClientMessage.LoginRequest("USER_NAME");
  119. String loginXml = serialize(loginRequest);
  120. System.out.println("Login Request XML: " + loginXml);
  121.  
  122. ClientMessage.ListMembers listMembers = new ClientMessage.ListMembers(123456);
  123. String listXml = serialize(listMembers);
  124. System.out.println("List Members XML: " + listXml);
  125.  
  126. ClientMessage.Message message = new ClientMessage.Message(123456, "Hello!");
  127. String messageXml = serialize(message);
  128. System.out.println("Message XML: " + messageXml);
  129.  
  130. ClientMessage.Logout logout = new ClientMessage.Logout(123456);
  131. String logoutXml = serialize(logout);
  132. System.out.println("Logout XML: " + logoutXml);
  133.  
  134. // Example deserialization
  135. ClientMessage deserializedMessage = deserialize(loginXml);
  136. System.out.println("Deserialized Login Request: " + deserializedMessage);
  137.  
  138. deserializedMessage = deserialize(listXml);
  139. System.out.println("Deserialized List Members: " + deserializedMessage);
  140.  
  141. deserializedMessage = deserialize(messageXml);
  142. System.out.println("Deserialized Message: " + deserializedMessage);
  143.  
  144. deserializedMessage = deserialize(logoutXml);
  145. System.out.println("Deserialized Logout: " + deserializedMessage);
  146. }
  147. }
  148. ```
  149.  
  150. This code provides serialization and deserialization methods for the `ClientMessage` class using DOM parser. The `serialize` method serializes a `ClientMessage` object into XML, and the `deserialize` method parses an XML string and returns the corresponding `ClientMessage` object. The `main` method includes example usage of serialization and deserialization for different types of `ClientMessage` instances.
Advertisement
Add Comment
Please, Sign In to add comment