@@ -57,6 +57,7 @@ public function setSoapClient(\SoapClient $soapClient)
5757 * @uses AbstractSoapClientBase::getDefaultWsdlOptions()
5858 * @uses AbstractSoapClientBase::getSoapClientClassName()
5959 * @uses AbstractSoapClientBase::setSoapClient()
60+ * @uses AbstractSoapClientBase::OPTION_PREFIX
6061 * @param array $options WSDL options
6162 * @return void
6263 */
@@ -71,20 +72,42 @@ public function initSoapClient(array $options)
7172 $ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , $ optionName )] = $ optionValue ;
7273 }
7374 }
74- if (array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL ), $ wsdlOptions )) {
75- $ wsdlUrl = $ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL )];
76- unset($ wsdlOptions [str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL )]);
75+ if (self ::canInstantiateSoapClientWithOptions ($ wsdlOptions )) {
76+ $ wsdlUrl = null ;
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 )]);
80+ }
7781 $ soapClientClassName = $ this ->getSoapClientClassName ();
7882 $ this ->setSoapClient (new $ soapClientClassName ($ wsdlUrl , $ wsdlOptions ));
7983 }
8084 }
85+ /**
86+ * Checks if the provided options are sufficient to instantiate a SoapClient:
87+ * - WSDL-mode : only the WSDL is required
88+ * - non-WSDL-mode : URI and LOCATION are required, WSDL url can be empty then
89+ * @uses AbstractSoapClientBase::OPTION_PREFIX
90+ * @param $wsdlOptions
91+ * @return bool
92+ */
93+ protected static function canInstantiateSoapClientWithOptions ($ wsdlOptions )
94+ {
95+ return (
96+ array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URL ), $ wsdlOptions ) ||
97+ (
98+ array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_URI ), $ wsdlOptions ) &&
99+ array_key_exists (str_replace (self ::OPTION_PREFIX , '' , self ::WSDL_LOCATION ), $ wsdlOptions )
100+ )
101+ );
102+ }
81103 /**
82104 * Returns the SoapClient class name to use to create the instance of the SoapClient.
83105 * The SoapClient class is determined based on the package name.
84106 * If a class is named as {Api}SoapClient, then this is the class that will be used.
85107 * Be sure that this class inherits from the native PHP SoapClient class and this class has been loaded or can be loaded.
86108 * The goal is to allow the override of the SoapClient without having to modify this generated class.
87109 * Then the overridding SoapClient class can override for example the SoapClient::__doRequest() method if it is needed.
110+ * @uses AbstractSoapClientBase::DEFAULT_SOAP_CLIENT_CLASS
88111 * @return string
89112 */
90113 public function getSoapClientClassName ($ soapClientClassName = null )
@@ -97,62 +120,68 @@ public function getSoapClientClassName($soapClientClassName = null)
97120 }
98121 /**
99122 * Method returning all default options values
100- * @uses AbstractSoapClientBase::WSDL_CLASSMAP
123+ * @uses AbstractSoapClientBase::WSDL_AUTHENTICATION
101124 * @uses AbstractSoapClientBase::WSDL_CACHE_WSDL
125+ * @uses AbstractSoapClientBase::WSDL_CLASSMAP
102126 * @uses AbstractSoapClientBase::WSDL_COMPRESSION
103127 * @uses AbstractSoapClientBase::WSDL_CONNECTION_TIMEOUT
104128 * @uses AbstractSoapClientBase::WSDL_ENCODING
105129 * @uses AbstractSoapClientBase::WSDL_EXCEPTIONS
106130 * @uses AbstractSoapClientBase::WSDL_FEATURES
131+ * @uses AbstractSoapClientBase::WSDL_LOCAL_CERT
107132 * @uses AbstractSoapClientBase::WSDL_LOCATION
108133 * @uses AbstractSoapClientBase::WSDL_LOGIN
134+ * @uses AbstractSoapClientBase::WSDL_PASSPHRASE
109135 * @uses AbstractSoapClientBase::WSDL_PASSWORD
136+ * @uses AbstractSoapClientBase::WSDL_PROXY_HOST
137+ * @uses AbstractSoapClientBase::WSDL_PROXY_LOGIN
138+ * @uses AbstractSoapClientBase::WSDL_PROXY_PASSWORD
139+ * @uses AbstractSoapClientBase::WSDL_PROXY_PORT
110140 * @uses AbstractSoapClientBase::WSDL_SOAP_VERSION
141+ * @uses AbstractSoapClientBase::WSDL_SSL_METHOD
111142 * @uses AbstractSoapClientBase::WSDL_STREAM_CONTEXT
143+ * @uses AbstractSoapClientBase::WSDL_STYLE
112144 * @uses AbstractSoapClientBase::WSDL_TRACE
113145 * @uses AbstractSoapClientBase::WSDL_TYPEMAP
114146 * @uses AbstractSoapClientBase::WSDL_URL
115- * @uses AbstractSoapClientBase::VALUE_WSDL_URL
147+ * @uses AbstractSoapClientBase::WSDL_URI
148+ * @uses AbstractSoapClientBase::WSDL_USE
116149 * @uses AbstractSoapClientBase::WSDL_USER_AGENT
117- * @uses AbstractSoapClientBase::WSDL_PROXY_HOST
118- * @uses AbstractSoapClientBase::WSDL_PROXY_PORT
119- * @uses AbstractSoapClientBase::WSDL_PROXY_LOGIN
120- * @uses AbstractSoapClientBase::WSDL_PROXY_PASSWORD
121- * @uses AbstractSoapClientBase::WSDL_LOCAL_CERT
122- * @uses AbstractSoapClientBase::WSDL_PASSPHRASE
123- * @uses AbstractSoapClientBase::WSDL_AUTHENTICATION
124- * @uses AbstractSoapClientBase::WSDL_SSL_METHOD
150+ * @uses WSDL_CACHE_NONE
125151 * @uses SOAP_SINGLE_ELEMENT_ARRAYS
126152 * @uses SOAP_USE_XSI_ARRAY_TYPE
127153 * @return array
128154 */
129155 public static function getDefaultWsdlOptions ()
130156 {
131157 return [
132- self ::WSDL_CLASSMAP => null ,
158+ self ::WSDL_AUTHENTICATION => null ,
133159 self ::WSDL_CACHE_WSDL => WSDL_CACHE_NONE ,
160+ self ::WSDL_CLASSMAP => null ,
134161 self ::WSDL_COMPRESSION => null ,
135162 self ::WSDL_CONNECTION_TIMEOUT => null ,
136163 self ::WSDL_ENCODING => null ,
137164 self ::WSDL_EXCEPTIONS => true ,
138165 self ::WSDL_FEATURES => SOAP_SINGLE_ELEMENT_ARRAYS | SOAP_USE_XSI_ARRAY_TYPE ,
166+ self ::WSDL_LOCAL_CERT => null ,
139167 self ::WSDL_LOCATION => null ,
140168 self ::WSDL_LOGIN => null ,
169+ self ::WSDL_PASSPHRASE => null ,
141170 self ::WSDL_PASSWORD => null ,
171+ self ::WSDL_PROXY_HOST => null ,
172+ self ::WSDL_PROXY_LOGIN => null ,
173+ self ::WSDL_PROXY_PASSWORD => null ,
174+ self ::WSDL_PROXY_PORT => null ,
142175 self ::WSDL_SOAP_VERSION => null ,
176+ self ::WSDL_SSL_METHOD => null ,
143177 self ::WSDL_STREAM_CONTEXT => null ,
178+ self ::WSDL_STYLE => null ,
144179 self ::WSDL_TRACE => true ,
145180 self ::WSDL_TYPEMAP => null ,
146181 self ::WSDL_URL => null ,
182+ self ::WSDL_URI => null ,
183+ self ::WSDL_USE => null ,
147184 self ::WSDL_USER_AGENT => null ,
148- self ::WSDL_PROXY_HOST => null ,
149- self ::WSDL_PROXY_PORT => null ,
150- self ::WSDL_PROXY_LOGIN => null ,
151- self ::WSDL_PROXY_PASSWORD => null ,
152- self ::WSDL_LOCAL_CERT => null ,
153- self ::WSDL_PASSPHRASE => null ,
154- self ::WSDL_AUTHENTICATION => null ,
155- self ::WSDL_SSL_METHOD => null ,
156185 ];
157186 }
158187 /**
0 commit comments