Advertisement
STEPAN_KODER_228

СТЕПАН ПРИКОЛ 1

May 22nd, 2023
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.32 KB | None | 0 0
  1. To serialize and deserialize XML using DOM parser in the `ClientMessage` class, you can add the following methods:
  2.  
  3. ```java
  4. import javax.xml.parsers.*;
  5. import org.w3c.dom.*;
  6. import java.io.*;
  7.  
  8. public abstract sealed class ClientMessage implements Serializable permits ClientMessage.ListMembers, ClientMessage.LoginRequest, ClientMessage.Logout, ClientMessage.Message {
  9. // ... existing code ...
  10.  
  11. public static String serialize(ClientMessage message) throws ParserConfigurationException {
  12. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  13. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  14. Document document = documentBuilder.newDocument();
  15.  
  16. Element rootElement = document.createElement("command");
  17. rootElement.setAttribute("name", message.getName());
  18.  
  19. if (message instanceof ClientMessage.LoginRequest loginRequest) {
  20. serializeLoginRequest(document, rootElement, loginRequest);
  21. } else if (message instanceof ClientMessage.ListMembers listMembers) {
  22. serializeListMembers(document, rootElement, listMembers);
  23. } else if (message instanceof ClientMessage.Message message) {
  24. serializeMessage(document, rootElement, message);
  25. } else if (message instanceof ClientMessage.Logout logout) {
  26. serializeLogout(document, rootElement, logout);
  27. }
  28.  
  29. document.appendChild(rootElement);
  30.  
  31. StringWriter writer = new StringWriter();
  32. try {
  33. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  34. Transformer transformer = transformerFactory.newTransformer();
  35. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  36. transformer.transform(new DOMSource(document), new StreamResult(writer));
  37. } catch (Exception e) {
  38. throw new RuntimeException(e);
  39. }
  40.  
  41. return writer.toString();
  42. }
  43.  
  44. private static void serializeLoginRequest(Document document, Element rootElement,
  45. ClientMessage.LoginRequest loginRequest) {
  46. Element nameElement = document.createElement("name");
  47. nameElement.setTextContent(loginRequest.getUserName());
  48. rootElement.appendChild(nameElement);
  49. }
  50.  
  51. private static void serializeListMembers(Document document, Element rootElement,
  52. ClientMessage.ListMembers listMembers) {
  53. Element sessionElement = document.createElement("session");
  54. sessionElement.setTextContent(String.valueOf(listMembers.getSessionID()));
  55. rootElement.appendChild(sessionElement);
  56. }
  57.  
  58. private static void serializeMessage(Document document, Element rootElement,
  59. ClientMessage.Message message) {
  60. Element messageElement = document.createElement("message");
  61. messageElement.setTextContent(message.getMessageText());
  62. Element sessionElement = document.createElement("session");
  63. sessionElement.setTextContent(String.valueOf(message.getSessionID()));
  64. rootElement.appendChild(messageElement);
  65. rootElement.appendChild(sessionElement);
  66. }
  67.  
  68. private static void serializeLogout(Document document, Element rootElement,
  69. ClientMessage.Logout logout) {
  70. Element sessionElement = document.createElement("session");
  71. sessionElement.setTextContent(String.valueOf(logout.getSessionID()));
  72. rootElement.appendChild(sessionElement);
  73. }
  74.  
  75. public static ClientMessage deserializeXml(String xml) throws Exception {
  76. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  77. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  78.  
  79. // Create an InputSource from the XML string
  80. InputSource inputSource = new InputSource(new StringReader(xml));
  81.  
  82. Document document = documentBuilder.parse(inputSource);
  83.  
  84. Element rootElement = document.getDocumentElement();
  85. String commandName = rootElement.getAttribute("name");
  86.  
  87. switch (commandName) {
  88. case "login" -> {
  89. Element nameElement = (Element) rootElement.getElementsByTagName("name").item(0);
  90. String userName = nameElement.getTextContent();
  91. return new ClientMessage.LoginRequest(userName);
  92. }
  93. case "list" -> {
  94. Element sessionElement = (Element) rootElement.getElementsByTagName("session").item(0);
  95. int sessionID = Integer.parseInt(sessionElement.getTextContent());
  96. return new ClientMessage.ListMembers(sessionID);
  97. }
  98. case "message" -> {
  99. Element messageElement = (Element) rootElement.getElementsByTagName
  100.  
  101. ("message").item(0);
  102. String messageText = messageElement.getTextContent();
  103. Element sessionElement = (Element) rootElement.getElementsByTagName("session").item(0);
  104. int sessionID = Integer.parseInt(sessionElement.getTextContent());
  105. return new ClientMessage.Message(sessionID, messageText);
  106. }
  107. case "logout" -> {
  108. Element sessionElement = (Element) rootElement.getElementsByTagName("session").item(0);
  109. int sessionID = Integer.parseInt(sessionElement.getTextContent());
  110. return new ClientMessage.Logout(sessionID);
  111. }
  112. default -> throw new IllegalArgumentException("Invalid XML structure.");
  113. }
  114. }
  115.  
  116. // ... existing code ...
  117.  
  118. public static void main(String[] args) throws Exception {
  119. // Example usage: Serialize and deserialize a ClientMessage
  120. ClientMessage message = new ClientMessage.LoginRequest("USER_NAME");
  121. String serializedXml = serialize(message);
  122. System.out.println("Serialized XML: " + serializedXml);
  123.  
  124. ClientMessage deserializedMessage = deserializeXml(serializedXml);
  125. System.out.println("Deserialized Message: " + deserializedMessage);
  126. }
  127. }
  128. ```
  129.  
  130. You can run the `main` method to see an example of serializing and deserializing a `ClientMessage` object. Adjust the example as needed for other types of messages.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement