Задание имени поля, если оно отличается от XMLName структуры - PullRequest
0 голосов
/ 04 января 2019

С набором типов, генерируемых gowsdl на основе определения веб-службы NetSuite SuiteTalk :

<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 конфликтует с именем «TokenPassportSignature» в * main.TokenPassportSignature.XMLName

Я извлек соответствующие биты в Go Playground , чтобы подтвердить, что это кодер, который выдает ошибку.Исходя из документов для Marhsal , кажется, что поле должно совпадать:

Если имя XML для поля структуры определяется как тегом поля, так и полем XMLName структуры,имена должны совпадать.

Есть мысли о том, как поступить?

1 Ответ

0 голосов
/ 28 июня 2019

В качестве альтернативы можно предпочесть оставить имя встроенной структуры TokenPassportSignature вместо имени signature.Если в названии поля указана строка:

Signature *TokenPassportSignature `xml:",omitempty"`

Код адаптирован

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...