Я новичок в JAXB, и у меня есть, вероятно, довольно простое решение, но я не уверен, как это сделать. Возможно, я могу получить следующий xml с устройства, которое я не контролирую.
Пример 1
<LoyaltyID entryMethod="swipe">
<Track1>636497123456678</Track1>
</LoyaltyID>
Пример 2
<LoyaltyID entryMethod="manual">636497123456678</LoyaltyID>
Я использовал xjc для создания класса JAXB со следующими определениями:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"track1",
"track2",
"track3"
})
@XmlRootElement(name = "LoyaltyID")
public class LoyaltyID {
@XmlElement(name = "Track1")
protected String track1;
@XmlElement(name = "Track2")
protected String track2;
@XmlElement(name = "Track3")
protected String track3;
@XmlAttribute(name = "entryMethod")
protected String entryMethod;
/**
* Gets the value of the track1 property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getTrack1() {
return track1;
}
/**
* Sets the value of the track1 property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTrack1(String value) {
this.track1 = value;
}
/**
* Gets the value of the track2 property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getTrack2() {
return track2;
}
/**
* Sets the value of the track2 property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTrack2(String value) {
this.track2 = value;
}
/**
* Gets the value of the track3 property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getTrack3() {
return track3;
}
/**
* Sets the value of the track3 property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTrack3(String value) {
this.track3 = value;
}
/**
* Gets the value of the entryMethod property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getEntryMethod() {
if (entryMethod == null) {
return "swipe";
} else {
return entryMethod;
}
}
/**
* Sets the value of the entryMethod property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setEntryMethod(String value) {
this.entryMethod = value;
}
Когда я распаковываю Пример 1, все работает отлично, я могу получить доступ к LoyaltyID (636497123456678) через вызов метода getTrack1(). Однако, если я получу XML в примере 2, я не смогу получить доступ к этим данным. Следует отметить, что я получаю образец XML 2 только тогда, когда для атрибута entryMethod установлено значение «вручную». Мне нужно иметь возможность не только распараллелить этот XML, но и рассортировать его обратно на устройство, отправившее его изначально. Кто-нибудь знает, как я могу это сделать?
Любая помощь в решении этого вопроса приветствуется.
Спасибо! - Тим