解析SOAP请求到Kotlin数据类时出错[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

嗨,我正在尝试制作肥皂。我使用RetrofitSimpleXmlFactory作为适配器。我为soap请求编写了以下数据类。但是在提出请求时,我收到的错误是这样的:

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>

我究竟做错了什么?

android soap kotlin retrofit2 simple-framework
1个回答
0
投票

尝试在代码中使用“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
)

只需将上述代码复制并粘贴到数据类中即可。

© www.soinside.com 2019 - 2024. All rights reserved.