summaryrefslogtreecommitdiff
path: root/vendor/github.com/mitchellh/packer/vendor/github.com/masterzen/winrm/soap/message.go
blob: 09c37bd46bf10807fad333f60d43e8f0ddb2e591 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package soap

import (
	"github.com/masterzen/simplexml/dom"
)

type SoapMessage struct {
	document *dom.Document
	envelope *dom.Element
	header   *SoapHeader
	body     *dom.Element
}

type MessageBuilder interface {
	SetBody(*dom.Element)
	NewBody() *dom.Element
	CreateElement(*dom.Element, string, dom.Namespace) *dom.Element
	CreateBodyElement(string, dom.Namespace) *dom.Element
	Header() *SoapHeader
	Doc() *dom.Document
	Free()
	String() string
}

func NewMessage() (message *SoapMessage) {
	doc := dom.CreateDocument()
	e := dom.CreateElement("Envelope")
	doc.SetRoot(e)
	AddUsualNamespaces(e)
	NS_SOAP_ENV.SetTo(e)

	message = &SoapMessage{document: doc, envelope: e}
	return
}

func (message *SoapMessage) NewBody() (body *dom.Element) {
	body = dom.CreateElement("Body")
	message.envelope.AddChild(body)
	NS_SOAP_ENV.SetTo(body)
	return
}

func (message *SoapMessage) String() string {
	return message.document.String()
}

func (message *SoapMessage) Doc() *dom.Document {
	return message.document
}

func (message *SoapMessage) Free() {
}

func (message *SoapMessage) CreateElement(parent *dom.Element, name string, ns dom.Namespace) (element *dom.Element) {
	element = dom.CreateElement(name)
	parent.AddChild(element)
	ns.SetTo(element)
	return
}

func (message *SoapMessage) CreateBodyElement(name string, ns dom.Namespace) (element *dom.Element) {
	if message.body == nil {
		message.body = message.NewBody()
	}
	return message.CreateElement(message.body, name, ns)
}

func (message *SoapMessage) Header() *SoapHeader {
	if message.header == nil {
		message.header = &SoapHeader{message: message}
	}
	return message.header
}