Модификация с использованием SimpleXmlConverter всегда возвращает нулевое тело - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь прочитать приведенный ниже XML документ с ответами, используя Retrofit 2.7.1 и Retrofit SimpleXMLConverter 2.3.0:

<Schedule xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Viptech">
<Entries>
<ScheduleEntry>
<Arrival>2020-01-05T22:33:00</Arrival>
<CutOff i:nil="true"/>
<Departure>2020-01-07T10:33:00</Departure>
<Port>Cotonou</Port>
<Vessel>Viking Coral</Vessel>
<Voyage>19VO02</Voyage>
</ScheduleEntry>
<ScheduleEntry>
<Arrival>2020-02-08T22:16:00</Arrival>
<CutOff i:nil="true"/>
<Departure>2020-02-09T10:16:00</Departure>
<Port>Cotonou</Port>
<Vessel>Glovis Supreme</Vessel>
<Voyage>20GZ01</Voyage>
</ScheduleEntry>
<ScheduleEntry>
<Arrival>2020-02-28T00:00:00</Arrival>
<CutOff i:nil="true"/>
<Departure>2020-02-28T12:00:00</Departure>
<Port>Cotonou</Port>
<Vessel>Glovis Solomon</Vessel>
<Voyage>20MM01</Voyage>
</ScheduleEntry>
<ScheduleEntry>
<Arrival>2020-03-06T10:59:00</Arrival>
<CutOff i:nil="true"/>
<Departure>2020-03-06T22:59:00</Departure>
<Port>Cotonou</Port>
<Vessel>Grand Duke</Vessel>
<Voyage>20GD01</Voyage>
</ScheduleEntry>
<ScheduleEntry>
<Arrival>2020-03-19T06:14:24</Arrival>
<CutOff i:nil="true"/>
<Departure>2020-03-20T06:14:00</Departure>
<Port>Cotonou</Port>
<Vessel>Glovis Symphony</Vessel>
<Voyage>20EV01</Voyage>
</ScheduleEntry>
</Entries>
</Schedule>

Используя этот VesselApiService Класс:

interface VesselApiService {

    @Headers("Accept: application/xml")
    @GET("schedule")
    fun getTestData(@Query("pod") city: String): Call<Entries?>?
}

С моделью Записи :

@Root
public class Entries {

    public List<ScheduleEntry> getScheduleEntry() {
        return scheduleEntry;
    }

    public void setScheduleEntry(List<ScheduleEntry> scheduleEntry) {
        this.scheduleEntry = scheduleEntry;
    }

    @ElementList
    public List<ScheduleEntry> scheduleEntry;

    @Root
    static public class ScheduleEntry {

        @Element
        public String arrival;

        @Element
        public Boolean cutOff;

        @Element
        public String departure;

        @Element
        public String port;

        @Element
        public String vessel;

        @Element
        public String voyage;
    }
}

Объект дооснащения здания NetworkClient как показано ниже:

object NetworkClient {

    const val BASE_URL = "https://app.domain.io/api/voyage/"

    var retrofit: Retrofit? = null

    val retrofitClient: Retrofit?
        get() {
            if (retrofit == null) {
                retrofit = Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(SimpleXmlConverterFactory.createNonStrict(Persister()))
                    .build()
            }
            return retrofit
        }
}

Запуск этого возврата ответ HTTP 200, но тело ответа всегда пустое. Уже не могу понять, что я делаю неправильно.

Я уже пытался добавить аннотацию @ ElementList , но выдает следующую ошибку:

java .lang.RuntimeException: org.simpleframework. xml .core.MethodException: Аннотация @ org.simpleframework. xml .ElementList (data = false, пусто = true, entry =, inline = true, name = entry, обязательно = true, type = void) должен пометить метод set или get

...