Ошибка при разборе запроса мыла к классу данных Kotlin

Привет, я пытаюсь сделать запрос на мыло. Я использую Retrofit и SimpleXmlFactory в качестве адаптера. Я написал приведенный ниже класс данных для запроса мыла. Но при выполнении запроса я получаю такую ​​ошибку:

org.simpleframework.xml.core.ConstructorException: Parameter 'soap:Body' does not have a match in class

Запрос на мыло:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://myserver.com/webservices/">
    <soap:Header/>
    <soap:Body>
        <web:GetAvailablePasses>
            <web:securityToken>*****</web:securityToken>
            <web:userName>*****</web:userName>
            <web:password>*****</web:password>
        </web:GetAvailablePasses>
    </soap:Body>
</soap:Envelope>

Это мой класс данных:

@Root(name = "soap:Envelope")
data class GetAvailablePassesRequest(
    @Element(name = "soap:Body", required = false)
    val body: MyRequest
)

@Root(name = "soap:Body", strict = false)
data class MyRequest(
    @Element(name = "web:GetAvailablePasses")
    val getAvailablePasses: GetAvailablePasses
)

@Root(name = "web:GetAvailablePasses")
data class GetAvailablePasses(
    @Element(name = "web:securityToken")
    var securityToken: String,
    @Element(name = "web:userName")
    var userName: String,
    @Element(name = "web:password")
    var password: String
)

Это мой интерфейс ApiService:

@POST("FlashPassAPI.asmx")
    fun getAvailablePasses(@Body request: GetAvailablePassesRequest): Single<GetAvailablePassesResponse>

Что я делаю не так?


person sagar suri    schedule 26.03.2019    source источник
comment
Я пробовал это, но это не решило проблему. @СохелС9   -  person sagar suri    schedule 26.03.2019


Ответы (1)


Попробуйте использовать «Body» вместо «soap: Body» в своем коде, дайте мне знать, если это сработает.

@Root(name = "soap:Envelope")
data class GetAvailablePassesRequest(
    @Element(name = "Body")
    val body: MyRequest
)

@Element(name = "soap:Body")
data class MyRequest(
    @Element(name = "web:GetAvailablePasses")
    val getAvailablePasses: GetAvailablePasses
)

@Element(name = "web:GetAvailablePasses")
data class GetAvailablePasses(
    @Element(name = "web:securityToken")
    var securityToken: String,
    @Element(name = "web:userName")
    var userName: String,
    @Element(name = "web:password")
    var password: String
)

Просто скопируйте и вставьте приведенный выше код в свой класс данных.

person Sayan Mukherjee    schedule 26.03.2019
comment
Я пытался, но не работал. @Саян - person sagar suri; 26.03.2019
comment
не могли бы вы сказать мне, какую ошибку показывает? - person Sayan Mukherjee; 26.03.2019
comment
Исправил, заменив @Element на @field:Element - person sagar suri; 26.03.2019
comment
не могли бы вы добавить ответ на свой вопрос, чтобы другие новички нашли его полезным? - person Sayan Mukherjee; 26.03.2019