? soap_server.module-soapextensionerror.patch Index: README.txt =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/soap_server/README.txt,v retrieving revision 1.2 diff -u -p -r1.2 README.txt --- README.txt 5 Feb 2008 05:58:40 -0000 1.2 +++ README.txt 6 Feb 2008 16:28:52 -0000 @@ -1,9 +1,19 @@ + +$Id: README.txt,v 1.2 2008/02/05 05:58:40 robloach Exp $ + + SOAP Server =========== The SOAP Server module allows a Drupal site to access services using the same callback code. -$Id: README.txt,v 1.2 2008/02/05 05:58:40 robloach Exp $ +Note: if soap extension is loaded in the PHP engine, the NuSOAP will not work, but +still the soap server will reply using standard xml error to don't break services +consumption. It faults with a 404 error. + +If soap extension is loaded, it's advised to unload it from the server for now. + + Requirements to call services via SOAP Server Index: soap_server.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/soap_server/Attic/soap_server.module,v retrieving revision 1.2 diff -u -p -r1.2 soap_server.module --- soap_server.module 5 Feb 2008 05:58:40 -0000 1.2 +++ soap_server.module 6 Feb 2008 16:28:55 -0000 @@ -13,7 +13,7 @@ */ /** - * Implementation of hook_menu() + * Implementation of hook_help() */ function soap_server_help($section) { switch ($section) { @@ -43,24 +43,32 @@ function soap_server_menu($may_cache) { */ function soap_server_admin_settings() { $form = array(); - - // Check to see if the SOAP Server is available. - $status = t('NuSOAP was not found'); - if (@include_once(realpath(soap_server_nusoap_path()))) { + $phpsoap = extension_loaded('soap'); + $status = t('Not'); + +//take care of loaded soap extension if php version supports it. +//Get php version and soap module status. + if ($phpsoap) { + $form['phpsoap_notice'] = array( + '#type' => 'markup', + '#value' => t("PHP builtin SOAP support is enabled. Enabling other soap engine will make the system fail. To avoid this, the following options appear disabled."), + ); + } + + if ((!$phpsoap) && (include_once(realpath(soap_server_nusoap_path())))) { $nusoap = new nusoap_base(); - $status = t('Version %version found', array('%version' => $nusoap->version)); + $status = $nusoap->version; } - - // Create the settings form to input the NuSOAP path. + $form['soap_server_nusoap_path'] = array( '#type' => 'textfield', '#title' => t('NuSOAP Path'), - '#description' => t('The location where NuSOAP is installed. This should be a relative path to nusoap.php. !status.', array('@NuSOAP' => 'http://sourceforge.net/projects/nusoap/', '!status' => $status)), + '#description' => t('The location where NuSOAP is installed. This should be a relative path to nusoap.php. @status found.', array('@NuSOAP' => 'http://sourceforge.net/projects/nusoap/', '@status' => $status)), '#default_value' => soap_server_nusoap_path(), + '#disabled' => $phpsoap, '#required' => TRUE ); - - // Create the settings form. + return system_settings_form($form); } @@ -87,14 +95,16 @@ function soap_server_server_info() { * Implementation of hook_server() */ function soap_server_server() { + // Use internal soap.. + $phpsoap = extension_loaded('soap'); // Load soap library - if (@include_once(realpath(soap_server_nusoap_path()))) { + if (($phpsoap)||(@include_once(realpath(soap_server_nusoap_path())))) { // Launch the server return soap_server(); } else { // Gracefully tell the user NuSOAP isn't installed - drupal_set_message(t('The SOAP Server requires proper installation of NuSOAP. Please see the SOAP Server settings for more information.', array('@nusoap' => 'http://sourceforge.net/projects/nusoap/', '@soapserver' => url('admin/build/services/settings/soap'))), 'error'); + drupal_set_message(t('The SOAP Server requires at least one SOAP engine in this server. PHP Soap extension is not enabled in this server, so a proper installation of NuSOAP is required. Please see the SOAP Server settings for more information.', array('@nusoap' => 'http://sourceforge.net/projects/nusoap/', '@soapserver' => url('admin/build/services/settings/soap'))), 'error'); drupal_goto(); } } @@ -106,7 +116,10 @@ function soap_server() { // Get the global var with post data.. global $HTTP_RAW_POST_DATA; global $soap_server; - + + // Again, check if using nusoap or php soap service + $phpsoap = extension_loaded('soap'); + // Construct URL. if (isset($_SERVER)) { $server_name = $_SERVER['SERVER_NAME']; @@ -132,8 +145,14 @@ function soap_server() { $name_space = $scheme . $server_name . base_path() . $q; // Create server instance - $soap_server = new soap_server(); + if ($phpsoap) { + $soap_server = new SoapServer(NULL, array('uri' => $name_space)); + $soap_server->fault(t('404'),t('This SOAP server doesn\'t provide any service. Please advise the site administrator about the configuration of the SOAP server.')); + exit; + } + // Create server instance + $soap_server = new soap_server(); // Initialize WSDL support $soap_server->configureWSDL('DrupalSoap', $name_space, $name_space); $soap_server->wsdl->schemaTargetNamespace = $name_space;