Как я могу получить веб-сервисы Java для использования расширенных классов - PullRequest
0 голосов
/ 14 февраля 2012

Я сгенерировал набор классов с Apache CXF на основе большого wsdl, который мы получили от нашего клиента.Он использует anyType, чтобы он содержал целую кучу разных типов.Это wsdl

<complexType name="PayloadBase">
    <complexContent>
        <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
        </restriction>
    </complexContent>
</complexType>

Это переводит в следующий код Java

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PayloadBase")
public class PayloadBase {

    // empty as you can see

}

Оказывается, что любой класс, который хочет использовать дочерний элемент этого класса, не знает, как работать сЭто.Скажем, например, подкласс PayloadBase добавляется к объекту-обертке, который также содержит метку времени, генерируется следующий XML

<bericht timestamp="2012-02-14T16:03:34.331+01:00"><payload/></bericht>

Это результат отправки следующего класса через код веб-сервиса

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BerichtDescription", propOrder = {
    "payload"
})
public class BerichtDescription {

    @XmlElement(required = true)
    protected PayloadBase payload;
    @XmlAttribute(name = "timestamp", required = true)
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar timestamp;

Любой используемый экземпляр PayloadBase никогда не будет отображаться в результирующем xml.С помощью отладчика я проверил, что экземпляр PayloadBase действительно заполнен контентом.Как мне заставить java webservices работать с этой настройкой?

1 Ответ

1 голос
/ 24 февраля 2012

Мне потребовалось некоторое время, чтобы разобраться, но в итоге уловка заключалась в том, чтобы добавить аннотацию @XmlSeeAlso в класс PayloadBase для каждого подкласса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...