diff --git a/xml-2/pom.xml b/xml-2/pom.xml
index c4882b0a53..6b25d66b6a 100644
--- a/xml-2/pom.xml
+++ b/xml-2/pom.xml
@@ -26,6 +26,26 @@
${junit-jupiter.version}
test
+
+ org.json
+ json
+ ${json.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+ ${jackson.version}
+
+
+ com.github.javadev
+ underscore
+ ${underscore.version}
+
@@ -51,6 +71,9 @@
2.1.3
+ 2.14.1
+ 20230227
+ 1.89
\ No newline at end of file
diff --git a/xml-2/src/test/java/com/baeldung/xml/json2xml/JsonToXmlUnitTest.java b/xml-2/src/test/java/com/baeldung/xml/json2xml/JsonToXmlUnitTest.java
new file mode 100644
index 0000000000..6c8486f14b
--- /dev/null
+++ b/xml-2/src/test/java/com/baeldung/xml/json2xml/JsonToXmlUnitTest.java
@@ -0,0 +1,77 @@
+package com.baeldung.xml.json2xml;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
+import com.github.underscore.U;
+import org.json.JSONObject;
+import org.json.XML;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class JsonToXmlUnitTest {
+
+ @Test
+ public void givenJsonString_whenConvertToXMLUsingJsonJava_thenConverted() {
+ String jsonString = "{\"name\":\"John\", \"age\":20, \"address\":{\"street\":\"Wall Street\", \"city\":\"New York\"}}";
+ JSONObject jsonObject = new JSONObject(jsonString);
+ String xmlString = XML.toString(jsonObject);
+ Assertions.assertEquals("New YorkWall StreetJohn20", xmlString);
+ }
+
+ @Test
+ public void givenJsonString_whenConvertToXMLUsingJackson_thenConverted() throws JsonProcessingException {
+ String jsonString = "{\"name\":\"John\", \"age\":20, \"address\":{\"street\":\"Wall Street\", \"city\":\"New York\"}}";
+ ObjectMapper objectMapper = new ObjectMapper();
+ JsonNode jsonNode = objectMapper.readTree(jsonString);
+ String xmlString = new XmlMapper().writeValueAsString(jsonNode);
+ Assertions.assertEquals("John20Wall StreetNew York", xmlString);
+ }
+
+ @Test
+ public void givenJsonString_whenConvertToXMLUsingJacksonWithXMLDeclarationAndRoot_thenConverted() throws JsonProcessingException {
+ String jsonString = "{\"name\":\"John\", \"age\":20, \"address\":{\"street\":\"Wall Street\", \"city\":\"New York\"}}";
+ ObjectMapper objectMapper = new ObjectMapper();
+ JsonNode jsonNode = objectMapper.readTree(jsonString);
+ XmlMapper xmlMapper = new XmlMapper();
+ xmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+ xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
+ xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_1_1, true);
+ String xmlString = xmlMapper.writer().withRootName("root").withDefaultPrettyPrinter().writeValueAsString(jsonNode);
+ Assertions.assertEquals("\n" +
+ "\n" +
+ " John\n" +
+ " 20\n" +
+ " \n" +
+ " Wall Street\n" +
+ " New York\n" +
+ " \n" +
+ "\n", xmlString);
+ }
+
+ @Test
+ public void givenJsonString_whenConvertToXMLUsingUnderscoreJava_thenConverted() {
+ String jsonString = "{\"name\":\"John\", \"age\":20}";
+ String xmlString = U.jsonToXml(jsonString);
+ Assertions.assertEquals("\n" +
+ "\n" +
+ " John\n" +
+ " 20\n" +
+ "", xmlString);
+ }
+
+ @Test
+ public void givenJsonString_whenConvertToXMLUsingUnderscoreJavaWithoutAttributes_thenConverted() {
+ String jsonString = "{\"name\":\"John\", \"age\":20}";
+ String xmlString = U.jsonToXml(jsonString, U.JsonToXmlMode.REMOVE_ATTRIBUTES);
+ Assertions.assertEquals("\n" +
+ "\n" +
+ " John\n" +
+ " 20\n" +
+ "", xmlString);
+ }
+}
+