Поскольку вы объявили для элемента XML <tx>
свойство типа Object
, у JAXB не было достаточно информации, чтобы создать что-то более конкретное, чем ElementNSImpl
.
. Вам потребуется более совершенная модель Java.для элемента <tx>
.Вместо того, чтобы объявлять его как тип Object
@XmlAnyElement(lax = true)
private Object tx;
, вам нужно объявить его с помощью полнофункционального Java-класса (назовем его Tx
):
private Tx tx;
КлассTx
представляет элемент XML <tx>
и все, что вложено внутрь.Это может выглядеть так:
@XmlAccessorType(XmlAccessType.FIELD)
public class Tx {
@XmlElement(name = "Envelope", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
private SoapEnvelope envelope;
}
Для моделирования элемента XML <soapenv:Envelope ...>
вы объявляете свойство (назовем его SoapEnvelope envelope
).Это свойство необходимо аннотировать @XmlElement
, чтобы сообщить JAXB, что оно сопоставляется с именем элемента XML Envelope
.Особенно обратите внимание на его параметр namespace
, который соответствует определению пространства имен XML xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
.
Затем повторите ту же процедуру с классом SoapEnvelope
для моделирования содержимого элемента XML <soapenv:Envelope>
:
@XmlAccessorType(XmlAccessType.FIELD)
public class SoapEnvelope {
@XmlElement(name = "Header", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
private SoapHeader header;
@XmlElement(name = "Body", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
private SoapBody body;
}
Затем повторите ту же процедуру с классами SoapHeader
и SoapBody
для моделирования содержимого элементов XML <soapenv:Header>
и <soapenv:Body>
:
@XmlAccessorType(XmlAccessType.FIELD)
public class SoapHeader {
...
}
@XmlAccessorType(XmlAccessType.FIELD)
public class SoapBody {
...
}