I have a web service where I expect to receive two different requests; one is called Request
containing just one Request
and the other is called RequestBulk
which contains an array of Request
s. Both mapped to Golang structs as follows:
type RequestBulk struct {
XMLName xml.Name `xml:"https://item.com RequestBulk"`
Message string `xml:"Message"`
Request []Request `xml:"Request,omitempty"`
}
type Request struct {
XMLName xml.Name `xml:"https://item.com Request"`
Text string `xml:"text"`
}
Unmarshalling the following XMLs works as expected:
<Request xmlns="https://item.com">
<text>Some request text</text>
</Request>
<RequestBulk xmlns="https://item.com">
<Message>Some Text</Message>
<Request xmlns="https://item.com">
<text>Some request text</text>
</Request>
<Request xmlns="https://item.com">
<text>Some other request text</text>
</Request>
</RequestBulk>
The Problem
In RequestBulk
, if I change
Request []Request `xml:"Request,omitempty"`
to
RequestMessage []Request `xml:"RequestMessage,omitempty"`
and change the XML to:
<RequestBulk xmlns="https://item.com">
<Message>Some Text</Message>
<RequestMessage xmlns="https://item.com">
<text>Some request text</text>
</RequestMessage>
<RequestMessage xmlns="https://item.com">
<text>Some other request text</text>
</RequestMessage>
</RequestBulk>
I get the following error:
expected element type <Request> but have <RequestMessage>
Obviously because of the XMLName xml.Name `xml:"https://item.com Request"`
The Question
How do I keep the Request
struct unchanged and still accept messages of type RequestBulk
with a different name for the struct Request
, namely, RequestMessage
?
In other words; How do I use the same struct with different namespaces?
Run it on Go Playground.