这个问题在这里已有答案:
嗨,我正在尝试制作肥皂。我使用Retrofit
和SimpleXmlFactory
作为适配器。我为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>
我究竟做错了什么?
尝试在代码中使用“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
)
只需将上述代码复制并粘贴到数据类中即可。