For Example, I have one POJO as shown below but it feeds into multiple operations but I do not want to create several identical POJO's just because the root element name changes for each operation. Hence I need one POJO but in such a way that I can dynamically change the Root Element Name.
@ToString
@MappedSuperclass
@lombok.Data
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@EqualsAndHashCode(callSuper = false)
public class AmountOrAccountBlockOrUnblockRequest extends XmlBuilder implements SessionGenerator {
@JsonIgnore
@XmlElement
private String TargetBankVerificationNumber;
@JsonIgnore
@XmlElement
private String Narration;
@JsonProperty("amount")
@XmlElement(name = "Amount")
private String amount;
@JsonProperty("savingAccountNumber")
@XmlElement(name = "TargetAccountNumber")
private String targetAccountNumber;
@JsonIgnore
@XmlElement
private String ChannelCode;
@JsonProperty("unblockId")
@JsonIgnore
@XmlElement
private String ReferenceCode;
@JsonIgnore
@XmlElement
private String DestinationInstitutionCode;
@JsonIgnore
@XmlElement
private String TargetAccountName;
@XmlElement
private String SessionID;
@JsonIgnore
@XmlElement
private String ReasonCode;
// if account is still blocked or released
@JsonProperty("block")
private boolean blockUnblock;
@JsonProperty("blockUnblockReason")
private String blockUnblockReason;
@Override
public String toXmlString() {
return super.convertObjectToXmlString(this, this.getClass());
}
@Override
public void generateSessionID(HelperFacade helperFacade) {
setSessionID(helperFacade.generateSessionID(this.getDestinationInstitutionCode()));
}
}
This single POJO above will serve several operations but with a different Root Element Name for each operation for example,
<AmountUnblockRequest>
<SessionID>000001100913103301000000000001</SessionID>
<DestinationInstitutionCode>000002</DestinationInstitutionCode>
<ChannelCode>7</ChannelCode>
<ReferenceCode>xxxxxxxxxxxxxxx</ReferenceCode>
<TargetAccountName>Ajibade Oluwasegun</TargetAccountName>
<TargetBankVerificationNumber>1033000442</TargetBankVerificationNumber>
<TargetAccountNumber>2222002345</TargetAccountNumber>
<ReasonCode>0001</ReasonCode>
<Narration>Transfer from 000002 to 0YY</Narration>
<Amount>1000.00</Amount>
</AmountUnblockRequest>
and
<AmountBlockRequest>
<SessionID>000001100913103301000000000001</SessionID>
<DestinationInstitutionCode>000002</DestinationInstitutionCode>
<ChannelCode>7</ChannelCode>
<ReferenceCode>xxxxxxxxxxxxxxx</ReferenceCode>
<TargetAccountName>Ajibade Oluwasegun</TargetAccountName>
<TargetBankVerificationNumber>1033000442</TargetBankVerificationNumber>
<TargetAccountNumber>2222002345</TargetAccountNumber>
<ReasonCode>0001</ReasonCode>
<Narration>Transfer from 000002 to 0YY</Narration>
<Amount>1000.00</Amount>
</AmountBlockRequest>
I want to avoid the pain of having to create two identical classes all because the root element name will change.