ConstructorException для синтаксического анализа XML с помощью Retrofit и SimpleXML (параметр не соответствует) - PullRequest
0 голосов
/ 07 ноября 2018

* РЕШЕНИЕ В ПЕРВОМ ОТВЕТЕ

Я довольно нуб, использую SimpleXML Converter, поэтому модели и аннотации могут быть неправильными.

Это XML Я получаю:

<?xml version="1.0" encoding="UTF-8"?>
<cards-summary-response xmlns="http:/mywebpage.com/rest-api">
    <card-summary>
        <identifier>51641C1B23931</identifier>
        <display-name>Debit Card</display-name>
        <program-name>plastic_debit</program-name>
        <status>Blocked</status>
    </card-summary>
    <card-summary>
        <identifier>4E1BDFCC1D6</identifier>
        <display-name>Virtual Debit</display-name>
        <program-name>virtual_debit</program-name>
        <status>Active</status>
    </card-summary>
</cards-summary-response>

Мои модели:

CardSummaryResponse.kt

@Root(strict = false, name = "cards-summary-response")
data class CardSummaryResponse constructor(
    @ElementList(
        required = false,
        name = "card-summary",
        entry = "card-summary",
        inline = true,
        empty = true
    )
    var cardsSummaryList: MutableList<CardSummary>? = null
)

CardSummary.kt

@Root(name = "card-summary")
data class CardSummary @JvmOverloads constructor(
    @field:Element(name = "identifier", required = true)
    var identifier: String = "",
    @field:Element(name = "status", required = true)
    var status: String = ""
)

Конфигурация API:

retrofit = Retrofit.Builder()
    .addConverterFactory(SimpleXmlConverterFactory.createNonStrict(
            Persister(AnnotationStrategy())
        )
    )
    .baseUrl(CallsConfiguration.BASE_URL_WIRECARD)
    .client(clientBuilder.build())
    .build()
service = retrofit.create(RetrofitInterface::class.java)

И RetrofitInterface (этот класс на Java):

@GET("webservices/wd-test.phtml")
Call<CardSummaryResponse> getCardsSummary();

Я всегда получаю одно и то же исключение:

java.lang.Error: org.simpleframework.xml.core.ConstructorException: Параметр 'card-summary' не соответствует в классе com.app.account.model.CardSummaryResponse

Есть предложения?

1 Ответ

0 голосов
/ 07 ноября 2018

Мне удалось заставить его работать, используя следующие модели:

CardSummaryResponse.tk

@Root(strict = false, name = "cards-summary-response")
data class CardSummaryResponse constructor(
    @field:ElementList(
        required = false,
        name = "card-summary",
        entry = "card-summary",
        inline = true,
        empty = true
    )
    var cardsSummaryList: MutableList<CardSummary>? = null
)

CardSummary.tk

@Root(name = "card-summary")
data class CardSummary constructor(
    @field:Element(name = "identifier", required = true)
    var identifier: String = "",
    @field:Element(name = "status", required = true)
    var status: String = ""
)
...