ARTICLE AD BOX
JavaObjectToXML
├── pom.xml
└── src
└── main
└── java
└── com
└── example
├── MiddleRoot.java
├── Root.java
└── Test.java
Root.java
same as yours, but remove import;
package com.example; public class Root { private String a; private String b; private String c; private String d; private String e; public Root() { } public Root(String a, String b, String c, String d, String e) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; } public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } public String getD() { return d; } public void setD(String d) { this.d = d; } public String getE() { return e; } public void setE(String e) { this.e = e; } }MiddleRoot.java
use fasterxml , not JAXB
package com.example; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import java.util.LinkedHashMap; import java.util.Map; @JacksonXmlRootElement(localName = "root") @JsonPropertyOrder({"head", "body"}) class MiddleRoot { private final Root root; public MiddleRoot(Root root) { this.root = root; } @JsonProperty("head") public Map<String, String> getHead() { Map<String, String> map = new LinkedHashMap<>(); map.put("a", root.getA()); map.put("b", root.getB()); map.put("c", root.getC()); return map; } @JsonProperty("body") public Map<String, String> getBody() { Map<String, String> map = new LinkedHashMap<>(); map.put("d", root.getD()); map.put("e", root.getE()); return map; } }Test.java
package com.example; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.xml.XmlMapper; public class Test { public static void main(String[] args) throws Exception { Root root = new Root("a", "b", "c", "d", "e"); XmlMapper xmlMapper = new XmlMapper(); xmlMapper.enable(SerializationFeature.INDENT_OUTPUT); String xml = xmlMapper.writeValueAsString(new RMiddleRoot(root)); System.out.println(xml); } }pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>object2xmlapp</artifactId> <version>0.0.1-SNAPSHOT</version> <name>object2xmlapp</name> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.15.2</version> </dependency> </dependencies> <build> <finalName>app</finalName> </build> </project>If you are not using Maven, that's fine too. You will need to manually download the following JAR files:
jackson-annotations-2.15.2.jar jackson-dataformat-xml-2.15.2.jar jackson-core-2.15.2.jar jackson-databind-2.15.2.jar stax2-api-4.2.1.jar woodstox-core-6.5.1.jar mvn clean package mvn dependency:copy-dependencies -DoutputDirectory=target/libs java -cp "target/libs/*:target/app.jar" com.example.TestOutput
<root> <head> <a>a</a> <b>b</b> <c>c</c> </head> <body> <d>d</d> <e>e</e> </body> </root>If you are not using Maven, the following is the directory structure for when the program is executed.
java -cp "target/libs/*:target/app.jar" com.example.Test JavaObjectToXML ├── pom.xml ├── src ... └── target ├── app.jar └── libs ├── jackson-annotations-2.15.2.jar ├── jackson-core-2.15.2.jar ├── jackson-databind-2.15.2.jar ├── jackson-dataformat-xml-2.15.2.jar ├── stax2-api-4.2.1.jar └── woodstox-core-6.5.1.jarNote that the command syntax is based on the Linux environment; if you are using Windows, you will need to adjust the syntax.
Windows:
Open CMD.exe , execute the command.
java -cp "target/libs/*;target/app.jar" com.example.Test