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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
<?php
/**
* WsdlOperation file.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the BSD License.
*
* Copyright(c) 2005 by Marcus Nyeholt. All rights reserved.
*
* To contact the author write to {@link mailto:tanus@users.sourceforge.net Marcus Nyeholt}
* This file is part of the PRADO framework from {@link http://www.xisc.com}
*
* @author Marcus Nyeholt <tanus@users.sourceforge.net>
* @version $Id$
* @package System.Web.Services.SOAP
*/
/**
* Represents a WSDL Operation. This is exported for the portTypes and bindings
* section of the soap service
* @author Marcus Nyeholt <tanus@users.sourceforge.net>
* @version $Revision$
*/
class WsdlOperation
{
/**
* The name of the operation
*/
private $operationName;
/**
* Documentation for the operation
*/
private $documentation;
/**
* The input wsdl message
*/
private $inputMessage;
/**
* The output wsdl message
*/
private $outputMessage;
public function __construct($name, $doc='')
{
$this->operationName = $name;
$this->documentation = $doc;
}
public function setInputMessage(WsdlMessage $msg)
{
$this->inputMessage = $msg;
}
public function setOutputMessage(WsdlMessage $msg)
{
$this->outputMessage = $msg;
}
/**
* Sets the message elements for this operation into the wsdl document
* @param DOMElement $wsdl The parent domelement for the messages
* @param DomDocument $dom The dom document to create the messages as children of
*/
public function setMessageElements(DOMElement $wsdl, DOMDocument $dom)
{
$input = $this->inputMessage->getMessageElement($dom);
$output = $this->outputMessage->getMessageElement($dom);
$wsdl->appendChild($input);
$wsdl->appendChild($output);
}
/**
* Get the port operations for this operation
* @param DomDocument $dom The dom document to create the messages as children of
* @return DomElement The dom element representing this port.
*/
public function getPortOperation(DomDocument $dom)
{
$operation = $dom->createElement('operation');
$operation->setAttribute('name', $this->operationName);
$documentation = $dom->createElement('documentation', htmlentities($this->documentation));
$input = $dom->createElement('input');
$input->setAttribute('message', 'tns:'.$this->inputMessage->getName());
$output = $dom->createElement('output');
$output->setAttribute('message', 'tns:'.$this->outputMessage->getName());
$operation->appendChild($documentation);
$operation->appendChild($input);
$operation->appendChild($output);
return $operation;
}
/**
* Build the binding operations.
* TODO: Still quite incomplete with all the things being stuck in, I don't understand
* a lot of it, and it's mostly copied from the output of nusoap's wsdl output.
* @param DomDocument $dom The dom document to create the binding as children of
* @param string $namespace The namespace this binding is in.
* @return DomElement The dom element representing this binding.
*/
public function getBindingOperation(DomDocument $dom, $namespace, $style='rpc')
{
$operation = $dom->createElement('operation');
$operation->setAttribute('name', $this->operationName);
$soapOperation = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/soap/', 'soap:operation');
$method = $this->operationName;
$soapOperation->setAttribute('soapAction', $namespace.'#'.$method);
$soapOperation->setAttribute('style', $style);
$input = $dom->createElement('input');
$output = $dom->createElement('output');
$soapBody = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/soap/', 'soap:body');
$soapBody->setAttribute('use', 'encoded');
$soapBody->setAttribute('namespace', $namespace);
$soapBody->setAttribute('encodingStyle', 'http://schemas.xmlsoap.org/soap/encoding/');
$input->appendChild($soapBody);
$output->appendChild(clone $soapBody);
$operation->appendChild($soapOperation);
$operation->appendChild($input);
$operation->appendChild($output);
return $operation;
}
}
?>
|