【问题标题】:Error in parsing soap request to Kotlin data class [duplicate]将soap请求解析为Kotlin数据类时出错[重复]
【发布时间】:2019-03-26 06:45:50
【问题描述】:

您好,我正在尝试提出肥皂请求。我使用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>

我做错了什么?

【问题讨论】:

  • 我试过了,但没有解决问题。 @SohelS9

标签: android soap kotlin retrofit2 simple-framework


【解决方案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
)

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

【讨论】:

  • 我试过但没用。 @Sayan
  • 你能告诉我显示了什么错误吗?
  • 通过将@Element 设置为@field:Element 来修复它
  • 能否请您为您的问题添加一个答案,以便其他初学者觉得它有帮助?
猜你喜欢
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多