代码 > golang中生成prefix形式的xmlns的xml文件
2017-09-17
最近在做一个调用soap接口守护程序。
找了一圈golang的库,都不是太好用,就干脆用仿照soap代码,自己生成和解析xml代码了。
然后发现golang 至少 1.9的xml库,虽然可以解析prefix,但不能生成prefix。查了一圈只能用模拟的方式自行去实现。
也就是自己去生成xmlns的属性,自己填入。
具体来说,代码结构如下:
type GetPartsInfoListRequest struct {
SoapNS string `xml:"xmlns:soap,attr"`
TemNS string `xml:"xmlns:tem,attr"`
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ soap:Envelope"`
}
req := GetPartsInfoListRequest{}
req.SoapNS = "http://schemas.xmlsoap.org/soap/envelope"
req.TemNS = "http://tempuri.org/"
bytes, err := xml.Marshal(req)
if err != nil {
panic(err)
}
fmt.Println(string(bytes))
另有之前遇到的错误
The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://tempuri.org/xxxx'.
这是构建请求xml时没有加入ws-a信息
参考 https://social.msdn.microsoft.com/Forums/vstudio/en-US/ed32328d-e3ad-47dd-bcb0-3db9e6205f9c/actionmismatchaddressingexception?forum=wcf
解决方案是在soap header中加入wsa的header。大概代码为
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Action>http://tempuri.org/xxx</wsa:Action>
</soap:Header>
点击登录