Skip to content

Commit 9923a3b

Browse files
JAXB Examples
1 parent ade0240 commit 9923a3b

File tree

2 files changed

+156
-0
lines changed

2 files changed

+156
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package com.howtodoinjava.jaxb;
2+
3+
import jakarta.xml.bind.JAXBContext;
4+
import jakarta.xml.bind.JAXBException;
5+
import jakarta.xml.bind.Marshaller;
6+
import jakarta.xml.bind.Unmarshaller;
7+
import jakarta.xml.bind.annotation.XmlAccessType;
8+
import jakarta.xml.bind.annotation.XmlAccessorType;
9+
import jakarta.xml.bind.annotation.XmlRootElement;
10+
import jakarta.xml.bind.annotation.XmlTransient;
11+
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
12+
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
13+
import java.io.StringReader;
14+
import java.io.StringWriter;
15+
import lombok.AllArgsConstructor;
16+
import lombok.Data;
17+
import lombok.NoArgsConstructor;
18+
19+
public class NoDefaultConstructor {
20+
21+
public static void main(String[] args) throws JAXBException {
22+
Address address = new Address("Line 1", "Line 2", "New Delhi", "India", new PinCode("110075"));
23+
JAXBContext jaxbContext = JAXBContext.newInstance(Address.class);
24+
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
25+
StringWriter stringWriter = new StringWriter();
26+
jaxbMarshaller.marshal(address, stringWriter);
27+
String XML = stringWriter.toString();
28+
System.out.println(XML);
29+
30+
String xmlAddress = """
31+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
32+
<Address>
33+
<line1>Line 1</line1>
34+
<line2>Line 2</line2>
35+
<city>New Delhi</city>
36+
<country>India</country>
37+
<pinCode>
38+
<code>110075</code>
39+
</pinCode>
40+
</Address>
41+
""";
42+
43+
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
44+
Address newAddress = (Address) jaxbUnmarshaller.unmarshal(new StringReader(xmlAddress));
45+
System.out.println(newAddress);
46+
}
47+
}
48+
49+
@Data
50+
@NoArgsConstructor
51+
@AllArgsConstructor
52+
@XmlRootElement(name = "Address")
53+
@XmlAccessorType(XmlAccessType.FIELD)
54+
class Address {
55+
String line1;
56+
String line2;
57+
String city;
58+
String country;
59+
//@XmlTransient
60+
@XmlJavaTypeAdapter(PinCodeAdapter.class)
61+
PinCode pinCode;
62+
}
63+
@Data
64+
class PinCode {
65+
String code;
66+
67+
public PinCode(String code){
68+
this.code = code;
69+
}
70+
}
71+
72+
@Data
73+
class XmlPinCode {
74+
75+
String code;
76+
public XmlPinCode(){
77+
}
78+
79+
public XmlPinCode(String code){
80+
this.code = code;
81+
}
82+
}
83+
84+
class PinCodeAdapter extends XmlAdapter<XmlPinCode, PinCode> {
85+
86+
@Override
87+
public PinCode unmarshal(XmlPinCode v) throws Exception {
88+
return new PinCode(v.getCode());
89+
}
90+
91+
@Override
92+
public XmlPinCode marshal(PinCode v) throws Exception {
93+
return new XmlPinCode(v.getCode());
94+
}
95+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.howtodoinjava.jaxb;
2+
3+
import jakarta.xml.bind.JAXBContext;
4+
import jakarta.xml.bind.JAXBException;
5+
import jakarta.xml.bind.Marshaller;
6+
import jakarta.xml.bind.Unmarshaller;
7+
import jakarta.xml.bind.annotation.XmlAccessType;
8+
import jakarta.xml.bind.annotation.XmlAccessorType;
9+
import jakarta.xml.bind.annotation.XmlRootElement;
10+
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
11+
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
12+
import java.io.StringReader;
13+
import java.io.StringWriter;
14+
import java.time.LocalDateTime;
15+
import java.time.temporal.Temporal;
16+
import lombok.AllArgsConstructor;
17+
import lombok.Data;
18+
import lombok.NoArgsConstructor;
19+
20+
public class XmlTypeAdapterOverInterface {
21+
22+
public static void main(String[] args) throws JAXBException {
23+
JAXBContext jaxbContext = JAXBContext.newInstance(BatchJob.class);
24+
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
25+
StringWriter stringWriter = new StringWriter();
26+
jaxbMarshaller.marshal(new BatchJob(LocalDateTime.now()), stringWriter);
27+
String XML = stringWriter.toString();
28+
System.out.println(XML);
29+
30+
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
31+
BatchJob newBatchJob = (BatchJob) jaxbUnmarshaller.unmarshal(new StringReader(XML));
32+
System.out.println(newBatchJob);
33+
}
34+
}
35+
36+
@Data
37+
@AllArgsConstructor
38+
@NoArgsConstructor
39+
@XmlRootElement(name = "BatchJob")
40+
@XmlAccessorType(XmlAccessType.FIELD)
41+
class BatchJob {
42+
43+
@XmlJavaTypeAdapter(TemporalAdapter.class)
44+
Temporal startTime;
45+
}
46+
47+
class TemporalAdapter extends XmlAdapter<String, Temporal> {
48+
49+
@Override
50+
public Temporal unmarshal(String v) throws Exception {
51+
return LocalDateTime.parse(v);
52+
}
53+
54+
@Override
55+
public String marshal(Temporal v) throws Exception {
56+
return v.toString();
57+
}
58+
}
59+
60+
61+

0 commit comments

Comments
 (0)