设置字段名称(如果与struct的XMLName不同)

时间:2019-01-04 00:54:15

标签: xml go wsdl

gowsdl根据NetSuite SuiteTalk web service definition生成的一组类型:

<complexType name="TokenPassportSignature">
   <simpleContent>
       <extension base="xsd:string">
          <attribute name="algorithm" type="xsd:string" use="required"/>
       </extension>
    </simpleContent>
 </complexType>
 <complexType name="TokenPassport">
    <sequence>
       <element name="account" type="xsd:string"/>
       <element name="consumerKey" type="xsd:string"/>
       <element name="token" type="xsd:string"/>
       <element name="nonce" type="xsd:string"/>
       <element name="timestamp" type="xsd:long"/>
       <element name="signature" type="platformCore:TokenPassportSignature"/>
    </sequence>
</complexType>

它创建了以下类型:

type TokenPassportSignature struct {
    XMLName xml.Name `xml:"urn:core_2018_2.platform.webservices.netsuite.com TokenPassportSignature"`
    Value string
    Algorithm string `xml:"algorithm,attr,omitempty"`
}

type TokenPassport struct {
    XMLName xml.Name `xml:"urn:core_2018_2.platform.webservices.netsuite.com TokenPassport"`
    Account string `xml:"account,omitempty"`
    ConsumerKey string `xml:"consumerKey,omitempty"`
    Token string `xml:"token,omitempty"`
    Nonce string `xml:"nonce,omitempty"`
    Timestamp int64 `xml:"timestamp,omitempty"`
    Signature *TokenPassportSignature `xml:"signature,omitempty"`
}

当我尝试通过客户端处理它时,XML编码过程不喜欢Signature字段具有冲突的名称。

  

xml:main.TokenPassport.Signature标记中的名称“ signature”与* main.TokenPassportSignature.XMLName中的名称“ TokenPassportSignature”冲突

我已经extracted out the relevant bits into Go Playground确认这是引发错误的编码器。根据{{​​3}}的文档,该字段似乎必须匹配:

  

如果两个字段标记都定义了结构字段的XML名称   和结构的XMLName字段,名称必须匹配。

对如何进行有任何想法吗?

1 个答案:

答案 0 :(得分:0)

或者,人们可能更喜欢保留嵌入式结构的名称TokenPassportSignature而不是名称signature。 如果是字段的命名,则该行将变为:

Signature *TokenPassportSignature `xml:",omitempty"`

Code adapted