Я ищу аннотацию Java, которая делает то же самое, что XmlInclude делает в C #.
Я получаю структуру XML через сокет. Структура выглядит так:
<Answer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FunctionReturnCode>0</FunctionReturnCode>
<AnswerObject xsi:type="Status">
<DoorOpen>79</DoorOpen>
</AnswerObject>
</Answer>
Соответствующий Java-класс определяется следующим образом:
@XmlRootElement(name="Answer")
@XmlType(propOrder = {"functionReturnCode", "answerObject"})
public class Answer
{
private Object m_answerObject = null;
private long m_uiFunctionReturnCode = 0;
@XmlElement(name="FunctionReturnCode")
public long getFunctionReturnCode(){ return this.m_uiFunctionReturnCode; }
public void setFunctionReturnCode(long _uiFunctionReturnCode) { this.m_uiFunctionReturnCode = _uiFunctionReturnCode; }
@XmlElement(name="AnswerObject")
public Object getAnswerObject() { return this.m_answerObject; }
public void setAnswerObject(Object _answerObject) { this.m_answerObject = _answerObject;}
}
В C # класс выглядит примерно так:
[XmlInclude(typeof(SelStatus))]
<<< это кажется мне волшебной точкой
Открытый класс Ответ: ICloneable </p>
{
private uint m_uiFunctionReturnCode = 0;
private object m_answerObject = null;
.....Setters/Getters here as well
}
Проблема в том, что «AnswerObject» может быть объектом любого типа. В моем примере «AnswerObject» является объектом типа «Status», но может быть также строкой или чем-либо еще.
В C # я могу использовать XmlSerializer для десериализации структуры XML. В Java я использую следующее:
JAXBContext context = JAXBContext.newInstance(Answer.class);
Unmarshaller unmarschaller = context.createUnmarshaller();
C # и Java (также) обрабатывают строки автоматически. Но в случае, если есть другой объект, то строка, которую я могу объявить C # с помощью XmlInclude других известных классов. Есть ли что-то подобное в Java?