4
我想提出一個SOAP調用的API SOAP響應,下面是一個簡單的迴應:拆封圍棋
<?xml version="1.0" encoding="utf-8" ?>
<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:body>
<soapenv:fault>
<faultcode>
ERR109
</faultcode>
<faultstring>
Account Expired. Result code is 2163
</faultstring>
<detail>
<ns1:serviceexception xmlns:ns1="http://www.csapi.org/schema/parlayx/common/v2_1">
<messageid>
ERR109
</messageid>
<text>
Account Expired. Result code is 2163
</text>
<variables>
2163
</variables>
</ns1:serviceexception>
</detail>
</soapenv:fault>
</soapenv:body>
</soapenv:envelope>
解編這種反應,我已經建立了一些結構:
type SoapResponse struct {
Body ResponseBody `soapenv:"body"`
}
type ResponseBody struct {
Fault Fault `soapenv:"fault"`
}
type Fault struct {
FaultCode string `xml:"faultcode"`
FaultString string `xml:"faultstring"`
Detail Detail `xml:"detail"`
}
type Detail struct {
ServiceException ServiceException `ns1:"serviceexception"`
}
type ServiceException struct {
ID string `xml:"messageid"`
MessageText string `xml:"text"`
ErrorCode string `xml:"variables"`
}
這裏是做了拆封部分代碼:
responseBody, _:= ioutil.ReadAll(resp.Body)
var soapResponse = new(SoapResponse)
err := xml.Unmarshal(responseBody, soapResponse)
if err != nil {
panic("Error!")
}
的問題是,所有soapResponse
properti除了soapResponse.Body.Fault.Detail.ServiceException.ID
沒有打印任何東西外,其他人都是正確的。
我想不通爲什麼。 任何幫助,將不勝感激。
您可以嘗試將所有標記名稱更改爲'xml'嗎? (https://play.golang.org/p/H4CA7DqVni) – mkopriva
@mkopriva我按照你的建議做了,它有點工作。 當我將所有標記名稱更改爲xml時,我不能再解組該響應,但我可以完全解組您的示例中的'data'變量。 第一個問題是,爲什麼會發生這種情況? 第二個是你的示例中的'data'變量和'ioutil.ReadAll(resp.Body)'有什麼區別?我還沒搞清楚。 – Sam
你是否100%確定你提供的樣本響應與'responseBody'的內容結構相同? – mkopriva