Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- To serialize and deserialize XML using DOM parser in the `ClientMessage` class, you can add the following methods:
- ```java
- import javax.xml.parsers.*;
- import org.w3c.dom.*;
- import java.io.*;
- public abstract sealed class ClientMessage implements Serializable permits ClientMessage.ListMembers, ClientMessage.LoginRequest, ClientMessage.Logout, ClientMessage.Message {
- // ... existing code ...
- public static String serialize(ClientMessage message) throws ParserConfigurationException {
- DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
- Document document = documentBuilder.newDocument();
- Element rootElement = document.createElement("command");
- rootElement.setAttribute("name", message.getName());
- if (message instanceof ClientMessage.LoginRequest loginRequest) {
- serializeLoginRequest(document, rootElement, loginRequest);
- } else if (message instanceof ClientMessage.ListMembers listMembers) {
- serializeListMembers(document, rootElement, listMembers);
- } else if (message instanceof ClientMessage.Message message) {
- serializeMessage(document, rootElement, message);
- } else if (message instanceof ClientMessage.Logout logout) {
- serializeLogout(document, rootElement, logout);
- }
- document.appendChild(rootElement);
- StringWriter writer = new StringWriter();
- try {
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.transform(new DOMSource(document), new StreamResult(writer));
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return writer.toString();
- }
- private static void serializeLoginRequest(Document document, Element rootElement,
- ClientMessage.LoginRequest loginRequest) {
- Element nameElement = document.createElement("name");
- nameElement.setTextContent(loginRequest.getUserName());
- rootElement.appendChild(nameElement);
- }
- private static void serializeListMembers(Document document, Element rootElement,
- ClientMessage.ListMembers listMembers) {
- Element sessionElement = document.createElement("session");
- sessionElement.setTextContent(String.valueOf(listMembers.getSessionID()));
- rootElement.appendChild(sessionElement);
- }
- private static void serializeMessage(Document document, Element rootElement,
- ClientMessage.Message message) {
- Element messageElement = document.createElement("message");
- messageElement.setTextContent(message.getMessageText());
- Element sessionElement = document.createElement("session");
- sessionElement.setTextContent(String.valueOf(message.getSessionID()));
- rootElement.appendChild(messageElement);
- rootElement.appendChild(sessionElement);
- }
- private static void serializeLogout(Document document, Element rootElement,
- ClientMessage.Logout logout) {
- Element sessionElement = document.createElement("session");
- sessionElement.setTextContent(String.valueOf(logout.getSessionID()));
- rootElement.appendChild(sessionElement);
- }
- public static ClientMessage deserializeXml(String xml) throws Exception {
- DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
- // Create an InputSource from the XML string
- InputSource inputSource = new InputSource(new StringReader(xml));
- Document document = documentBuilder.parse(inputSource);
- Element rootElement = document.getDocumentElement();
- String commandName = rootElement.getAttribute("name");
- switch (commandName) {
- case "login" -> {
- Element nameElement = (Element) rootElement.getElementsByTagName("name").item(0);
- String userName = nameElement.getTextContent();
- return new ClientMessage.LoginRequest(userName);
- }
- case "list" -> {
- Element sessionElement = (Element) rootElement.getElementsByTagName("session").item(0);
- int sessionID = Integer.parseInt(sessionElement.getTextContent());
- return new ClientMessage.ListMembers(sessionID);
- }
- case "message" -> {
- Element messageElement = (Element) rootElement.getElementsByTagName
- ("message").item(0);
- String messageText = messageElement.getTextContent();
- Element sessionElement = (Element) rootElement.getElementsByTagName("session").item(0);
- int sessionID = Integer.parseInt(sessionElement.getTextContent());
- return new ClientMessage.Message(sessionID, messageText);
- }
- case "logout" -> {
- Element sessionElement = (Element) rootElement.getElementsByTagName("session").item(0);
- int sessionID = Integer.parseInt(sessionElement.getTextContent());
- return new ClientMessage.Logout(sessionID);
- }
- default -> throw new IllegalArgumentException("Invalid XML structure.");
- }
- }
- // ... existing code ...
- public static void main(String[] args) throws Exception {
- // Example usage: Serialize and deserialize a ClientMessage
- ClientMessage message = new ClientMessage.LoginRequest("USER_NAME");
- String serializedXml = serialize(message);
- System.out.println("Serialized XML: " + serializedXml);
- ClientMessage deserializedMessage = deserializeXml(serializedXml);
- System.out.println("Deserialized Message: " + deserializedMessage);
- }
- }
- ```
- 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