@@ -60,6 +60,7 @@ public static function setSoapClient(\SoapClient $soapClient)
6060 * @uses AbstractSoapClientBase::getDefaultWsdlOptions()
6161 * @uses AbstractSoapClientBase::getSoapClientClassName()
6262 * @uses AbstractSoapClientBase::setSoapClient()
63+ * @uses AbstractSoapClientBase::OPTION_PREFIX
6364 * @param array $options WSDL options
6465 * @return void
6566 */
@@ -74,20 +75,42 @@ public function initSoapClient(array $options)
7475 $ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , $ optionName )] = $ optionValue ;
7576 }
7677 }
77- if (array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL ), $ wsdlOptions )) {
78- $ wsdlUrl = $ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL )];
79- unset($ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL )]);
78+ if (self ::canInstantiateSoapClientWithOptions ($ wsdlOptions )) {
79+ $ wsdlUrl = null ;
80+ if (array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL ), $ wsdlOptions )) {
81+ $ wsdlUrl = $ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL )];
82+ unset($ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL )]);
83+ }
8084 $ soapClientClassName = $ this ->getSoapClientClassName ();
8185 static ::setSoapClient (new $ soapClientClassName ($ wsdlUrl , $ wsdlOptions ));
8286 }
8387 }
88+ /**
89+ * Checks if the provided options are sufficient to instantiate a SoapClient:
90+ * - WSDL-mode : only the WSDL is required
91+ * - non-WSDL-mode : URI and LOCATION are required, WSDL url can be empty then
92+ * @uses AbstractSoapClientBase::OPTION_PREFIX
93+ * @param $wsdlOptions
94+ * @return bool
95+ */
96+ protected static function canInstantiateSoapClientWithOptions ($ wsdlOptions )
97+ {
98+ return (
99+ array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL ), $ wsdlOptions ) ||
100+ (
101+ array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URI ), $ wsdlOptions ) &&
102+ array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_LOCATION ), $ wsdlOptions )
103+ )
104+ );
105+ }
84106 /**
85107 * Returns the SoapClient class name to use to create the instance of the SoapClient.
86108 * The SoapClient class is determined based on the package name.
87109 * If a class is named as {Api}SoapClient, then this is the class that will be used.
88110 * Be sure that this class inherits from the native PHP SoapClient class and this class has been loaded or can be loaded.
89111 * The goal is to allow the override of the SoapClient without having to modify this generated class.
90112 * Then the overridding SoapClient class can override for example the SoapClient::__doRequest() method if it is needed.
113+ * @uses AbstractSoapClientBase::DEFAULT_SOAP_CLIENT_CLASS
91114 * @return string
92115 */
93116 public function getSoapClientClassName ($ soapClientClassName = null )
@@ -100,62 +123,68 @@ public function getSoapClientClassName($soapClientClassName = null)
100123 }
101124 /**
102125 * Method returning all default options values
103- * @uses AbstractSoapClientBase::WSDL_CLASSMAP
126+ * @uses AbstractSoapClientBase::WSDL_AUTHENTICATION
104127 * @uses AbstractSoapClientBase::WSDL_CACHE_WSDL
128+ * @uses AbstractSoapClientBase::WSDL_CLASSMAP
105129 * @uses AbstractSoapClientBase::WSDL_COMPRESSION
106130 * @uses AbstractSoapClientBase::WSDL_CONNECTION_TIMEOUT
107131 * @uses AbstractSoapClientBase::WSDL_ENCODING
108132 * @uses AbstractSoapClientBase::WSDL_EXCEPTIONS
109133 * @uses AbstractSoapClientBase::WSDL_FEATURES
134+ * @uses AbstractSoapClientBase::WSDL_LOCAL_CERT
110135 * @uses AbstractSoapClientBase::WSDL_LOCATION
111136 * @uses AbstractSoapClientBase::WSDL_LOGIN
137+ * @uses AbstractSoapClientBase::WSDL_PASSPHRASE
112138 * @uses AbstractSoapClientBase::WSDL_PASSWORD
139+ * @uses AbstractSoapClientBase::WSDL_PROXY_HOST
140+ * @uses AbstractSoapClientBase::WSDL_PROXY_LOGIN
141+ * @uses AbstractSoapClientBase::WSDL_PROXY_PASSWORD
142+ * @uses AbstractSoapClientBase::WSDL_PROXY_PORT
113143 * @uses AbstractSoapClientBase::WSDL_SOAP_VERSION
144+ * @uses AbstractSoapClientBase::WSDL_SSL_METHOD
114145 * @uses AbstractSoapClientBase::WSDL_STREAM_CONTEXT
146+ * @uses AbstractSoapClientBase::WSDL_STYLE
115147 * @uses AbstractSoapClientBase::WSDL_TRACE
116148 * @uses AbstractSoapClientBase::WSDL_TYPEMAP
117149 * @uses AbstractSoapClientBase::WSDL_URL
118- * @uses AbstractSoapClientBase::VALUE_WSDL_URL
150+ * @uses AbstractSoapClientBase::WSDL_URI
151+ * @uses AbstractSoapClientBase::WSDL_USE
119152 * @uses AbstractSoapClientBase::WSDL_USER_AGENT
120- * @uses AbstractSoapClientBase::WSDL_PROXY_HOST
121- * @uses AbstractSoapClientBase::WSDL_PROXY_PORT
122- * @uses AbstractSoapClientBase::WSDL_PROXY_LOGIN
123- * @uses AbstractSoapClientBase::WSDL_PROXY_PASSWORD
124- * @uses AbstractSoapClientBase::WSDL_LOCAL_CERT
125- * @uses AbstractSoapClientBase::WSDL_PASSPHRASE
126- * @uses AbstractSoapClientBase::WSDL_AUTHENTICATION
127- * @uses AbstractSoapClientBase::WSDL_SSL_METHOD
153+ * @uses WSDL_CACHE_NONE
128154 * @uses SOAP_SINGLE_ELEMENT_ARRAYS
129155 * @uses SOAP_USE_XSI_ARRAY_TYPE
130156 * @return array
131157 */
132158 public static function getDefaultWsdlOptions ()
133159 {
134160 return [
135- self ::WSDL_CLASSMAP => null ,
161+ self ::WSDL_AUTHENTICATION => null ,
136162 self ::WSDL_CACHE_WSDL => WSDL_CACHE_NONE ,
163+ self ::WSDL_CLASSMAP => null ,
137164 self ::WSDL_COMPRESSION => null ,
138165 self ::WSDL_CONNECTION_TIMEOUT => null ,
139166 self ::WSDL_ENCODING => null ,
140167 self ::WSDL_EXCEPTIONS => true ,
141168 self ::WSDL_FEATURES => SOAP_SINGLE_ELEMENT_ARRAYS | SOAP_USE_XSI_ARRAY_TYPE ,
169+ self ::WSDL_LOCAL_CERT => null ,
142170 self ::WSDL_LOCATION => null ,
143171 self ::WSDL_LOGIN => null ,
172+ self ::WSDL_PASSPHRASE => null ,
144173 self ::WSDL_PASSWORD => null ,
174+ self ::WSDL_PROXY_HOST => null ,
175+ self ::WSDL_PROXY_LOGIN => null ,
176+ self ::WSDL_PROXY_PASSWORD => null ,
177+ self ::WSDL_PROXY_PORT => null ,
145178 self ::WSDL_SOAP_VERSION => null ,
179+ self ::WSDL_SSL_METHOD => null ,
146180 self ::WSDL_STREAM_CONTEXT => null ,
181+ self ::WSDL_STYLE => null ,
147182 self ::WSDL_TRACE => true ,
148183 self ::WSDL_TYPEMAP => null ,
149184 self ::WSDL_URL => null ,
185+ self ::WSDL_URI => null ,
186+ self ::WSDL_USE => null ,
150187 self ::WSDL_USER_AGENT => null ,
151- self ::WSDL_PROXY_HOST => null ,
152- self ::WSDL_PROXY_PORT => null ,
153- self ::WSDL_PROXY_LOGIN => null ,
154- self ::WSDL_PROXY_PASSWORD => null ,
155- self ::WSDL_LOCAL_CERT => null ,
156- self ::WSDL_PASSPHRASE => null ,
157- self ::WSDL_AUTHENTICATION => null ,
158- self ::WSDL_SSL_METHOD => null ,
159188 ];
160189 }
161190 /**
0 commit comments