Reputation: 97
I am trying to convert the following XML string (1) to a Java Object.
I am trying to follow this tutorial : https://www.javatpoint.com/jaxb-unmarshalling-example but not able to do it correctly. I have 3 class files : AccountObject (2), checkingAccts (3), loanAccts (4).
One point to be noted is that all of the values can be empty/null i.e. checking account list, loan account list and status empty.
What is the acceptable method of converting this XML into the object?
(1)
<AccountObject xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<categories
xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:string>category</a:string>
<a:string>category</a:string>
</categories>
<checkingAccts>
<CheckingAccts>
<acctNbr>1111</acctNbr>
<acctStatus>0</acctStatus>
<availBalance>14299.49</availBalance>
<balance>14294.49</balance>
<dateOpened>2017-09-07</dateOpened>
<type>4020</type>
</CheckingAccts>
<CheckingAccts>
<acctNbr>2222</acctNbr>
<acctStatus>0</acctStatus>
<availBalance>470.72</availBalance>
<balance>465.72</balance>
<dateOpened>2017-09-18</dateOpened>
<type>4020</type>
</CheckingAccts>
<CheckingAccts>
<acctNbr>4444</acctNbr>
<acctStatus>0</acctStatus>
<availBalance>5.00</availBalance>
<balance>0.00</balance>
<dateOpened>2018-04-26</dateOpened>
<type>4200</type>
</CheckingAccts>
</checkingAccts>
<loanAccts>
<LoanAccts>
<acctNbr>1111</acctNbr>
<acctStatus>0</acctStatus>
<availBalance>25000.00</availBalance>
<balance>1100.03</balance>
<dateOpened>2017-10-13</dateOpened>
<type>6190</type>
</LoanAccts>
<LoanAccts>
<acctNbr>2222</acctNbr>
<acctStatus>0</acctStatus>
<availBalance>87777.00</availBalance>
<balance>0.00</balance>
<dateOpened>2018-04-26</dateOpened>
<type>6160</type>
</LoanAccts>
</loanAccts>
<statusMessage>THIS IS A TEST MESSAGE</statusMessage>
</AccountObject>
(2)
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "AccountObject")
public class AccountObject {
private String statusMessage;
private List<CheckingAccts> checkingAccounts;
private List<LoanAccts> loanAccounts;
public List<LoanAccts> getLoanAccounts() {
return loanAccounts;
}
public void setLoaanAccounts(List<LoanAccts> loaanAccounts) {
this.loanAccounts = loaanAccounts;
}
public String getStatusMessage() {
return statusMessage;
}
public void setStatusMessage(String statusMessage) {
this.statusMessage = statusMessage;
}
public List<CheckingAccts> getCheckingAccounts() {
return checkingAccounts;
}
public void setCheckingAccounts(List<CheckingAccts> checkingAccounts) {
this.checkingAccounts = checkingAccounts;
}
}
(3)
public class CheckingAccts {
protected String acctNbr;
protected String acctStatus;
protected String availBalance;
protected String balance;
protected String dateOpened;
protected String type;
public String getAcctNbr() {
return acctNbr;
}
public void setAcctNbr(String acctNbr) {
this.acctNbr = acctNbr;
}
public String getDateOpened() {
return dateOpened;
}
public void setDateOpened(String dateOpened) {
this.dateOpened = dateOpened;
}
public String getAcctStatus() {
return acctStatus;
}
public void setAcctStatus(String acctStatus) {
this.acctStatus = acctStatus;
}
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
public String getAvailBalance() {
return availBalance;
}
public void setAvailBalance(String availBalance) {
this.availBalance = availBalance;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
(4)
public class LoanAccts {
protected String acctNbr;
protected String acctStatus;
protected String availBalance;
protected String balance;
protected String dateOpened;
protected String type;
public String getAcctNbr() {
return acctNbr;
}
public void setAcctNbr(String acctNbr) {
this.acctNbr = acctNbr;
}
public String getAcctStatus() {
return acctStatus;
}
public void setAcctStatus(String acctStatus) {
this.acctStatus = acctStatus;
}
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
public String getAvailBalance() {
return availBalance;
}
public void setAvailBalance(String availBalance) {
this.availBalance = availBalance;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDateOpened() {
return dateOpened;
}
public void setDateOpened(String dateOpened) {
this.dateOpened = dateOpened;
}
}
Upvotes: 0
Views: 2503
Reputation: 5351
Account.java:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "AccountObject")
public class Account {
private String statusMessage;
private CheckingAccount checkingAccts;
private LoanAccount loanAccts;
public Account() {}
public Account(String statusMessage, CheckingAccount checkingAccts, LoanAccount loanAccts) {
super();
this.statusMessage = statusMessage;
this.checkingAccts = checkingAccts;
this.loanAccts = loanAccts;
}
@XmlElement(name="statusMessage")
public String getStatusMessage() {
return statusMessage;
}
public void setStatusMessage(String statusMessage) {
this.statusMessage = statusMessage;
}
@XmlElement(name="checkingAccts")
public CheckingAccount getCheckingAccts() {
return checkingAccts;
}
public void setCheckingAccts(CheckingAccount checkingAccts) {
this.checkingAccts = checkingAccts;
}
@XmlElement(name="loanAccts")
public LoanAccount getLoanAccts() {
return loanAccts;
}
public void setLoanAccts(LoanAccount loanAccts) {
this.loanAccts = loanAccts;
}
}
CheckingAccount.java:
import javax.xml.bind.annotation.XmlElement;
public class CheckingAccount {
private List<CheckAC> checkingAcctsList;
public CheckingAccount() {}
public CheckingAccount(List<CheckAC> checkingAcctsList) {
super();
this.checkingAcctsList = checkingAcctsList;
}
@XmlElement(name="CheckingAccts")
public List<CheckAC> getCheckingAcctsList() {
return checkingAcctsList;
}
public void setCheckingAcctsList(List<CheckAC> checkingAcctsList) {
this.checkingAcctsList = checkingAcctsList;
}
}
CheckAC.java:
public class CheckAC {
protected String acctNbr;
protected String acctStatus;
protected String availBalance;
protected String balance;
protected String dateOpened;
protected String type;
public CheckAC() {}
public CheckAC(String acctNbr, String acctStatus, String availBalance, String balance, String dateOpened,
String type) {
super();
this.acctNbr = acctNbr;
this.acctStatus = acctStatus;
this.availBalance = availBalance;
this.balance = balance;
this.dateOpened = dateOpened;
this.type = type;
}
@XmlElement(name="acctNbr")
public String getAcctNbr() {
return acctNbr;
}
public void setAcctNbr(String acctNbr) {
this.acctNbr = acctNbr;
}
@XmlElement(name="dateOpened")
public String getDateOpened() {
return dateOpened;
}
public void setDateOpened(String dateOpened) {
this.dateOpened = dateOpened;
}
@XmlElement(name="acctStatus")
public String getAcctStatus() {
return acctStatus;
}
public void setAcctStatus(String acctStatus) {
this.acctStatus = acctStatus;
}
@XmlElement(name="balance")
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
@XmlElement(name="availBalance")
public String getAvailBalance() {
return availBalance;
}
public void setAvailBalance(String availBalance) {
this.availBalance = availBalance;
}
@XmlElement(name="type")
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
Main.java:
public class Main {
public static void main(String[] args) throws JAXBException {
File file = new File("etc/question.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Account.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Account acc = (Account) jaxbUnmarshaller.unmarshal(file);
// List of checking accounts
List<CheckAC> checkingACList = acc.getCheckingAccts().getCheckingAcctsList();
for(CheckAC checkAC : checkingACList)
System.out.println("A/C No: " + checkAC.getAcctNbr() + " ,A/C Status: "
+ checkAC.getAcctStatus() + " ,Available Balance: " + checkAC.getAvailBalance() + " ,Date Opened: " + checkAC.getDateOpened()
+ " ,Type: " + checkAC.getType() + " ,Balance: " + checkAC.getBalance());
}
}
Output:
Explanation:
account class
. Now it has CheckingAccount
and LoanAccount
because if you look XML closely then you will find these are tags.CheckingAccount
and LoanAccount
classes have a list of CheckAC
and LoanAC
which further have tags such as acctNbr
, acctStatus
etc corresponding to each class.Upvotes: 2