Forums / Developer / Simple code to connect to a wsdl service and retrieve SOAP data with PEAR::SOAP

Simple code to connect to a wsdl service and retrieve SOAP data with PEAR::SOAP

Author Message

Olivier Pierret

Wednesday 02 March 2005 3:34:15 am

Hello all,

Just this message to announce that i did a very simple extension that connects onto a wsdl service and returns an associative array with the result of a call to a web services:

Basically

{let resultat=fetch('pear_soap_client','getSOAPResult',hash(soapWSDLURL,'http://nsilasw2k02:8080/gpat/services/Login?wsdl', 
							soapOperation, 'getUserSecurity', 
							soapOperationParameters, array('bco','7654','administrator','PA')))}

{$resultat.SQLErrorCode}
{/let}

gives you: 0
which is part of the following soap response (translated in PHP associative arrays)

Array
(
    [SQLErrorCode] => 0
    [SQLErrorMessage] => 
    [VOUserRoleArray] => stdClass Object
        (
            [item] => stdClass Object
                (
                    [application] => PA
                    [codlan] => F
                    [codusr] => bco
                    [datcre] => 2004-03-21T23:00:00.000Z
                    [datmod] => 
                    [email] => b.e@test.be
                    [encryptedUniqueKey] => 
                    [foncti] => Humoriste
                    [nom] => Colaglu
                    [numfax] => 
                    [numgsm] => 
                    [numtel] => 09370089
                    [objectStatus] => NONE
                    [passwd] => 7654
                    [prenom] => prenom
                    [profil] => administrator
                    [xlogcr] => bco
                    [xlogmo] => 
                )

        )

    [detailedErrorMessage] => 
)

This code was quite obvious to write (*) but may be of interest for EZ developers and users. If people find it useful and relevant I can publish it as a contribution.

However there is a big drawback at this point: the data structure returned by PEAR::SOAP is made of stdclass nested together which is not usable in EZ Publish. I probably need a method to "recursively translate object property vales into hash table". Any idea ?

FYI here is this code of the main function of the extension:

...
require_once('SOAP/Client.php'); 
...
	function &getSOAPResult( $soapWSDLURL, $soapOperation, $soapOperationParameters)
	{ 
		eZINI::setIsDebugEnabled( true );
		$wsdl=new SOAP_WSDL($soapWSDLURL);
		$proxy=$wsdl->getProxy(); 
		$eval_str="\$result =\$proxy->$soapOperation(";
		foreach ($soapOperationParameters as $argValue) {
			$eval_str .= "\"$argValue\",";
		}
		$eval_str = substr("$eval_str", 0, -1).");";
		eval($eval_str);
		$result_array = get_object_vars($result);
		return array( 'result' => &$result_array ); 
	}	

Best regards
Olivier Pierret

(*) compared to other extension code available uploaded in the contrib section.

eZ debug

Timing: Jan 18 2025 22:13:28
Script start
Timing: Jan 18 2025 22:13:28
Module start 'content'
Timing: Jan 18 2025 22:13:29
Module end 'content'
Timing: Jan 18 2025 22:13:29
Script end

Main resources:

Total runtime0.6900 sec
Peak memory usage4,096.0000 KB
Database Queries183

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0066 588.0938180.7813
Module start 'content' 0.00660.5103 768.8750419.3672
Module end 'content' 0.51690.1730 1,188.2422333.7500
Script end 0.6899  1,521.9922 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00430.6206210.0002
Check MTime0.00150.2149210.0001
Mysql Total
Database connection0.00070.105410.0007
Mysqli_queries0.605887.80121830.0033
Looping result0.00230.33801810.0000
Template Total0.661795.920.3309
Template load0.00200.292820.0010
Template processing0.659795.604520.3298
Template load and register function0.00020.028110.0002
states
state_id_array0.00070.098710.0007
state_identifier_array0.00110.154720.0005
Override
Cache load0.00160.2385200.0001
Sytem overhead
Fetch class attribute can translate value0.00210.305320.0011
Fetch class attribute name0.00100.147210.0010
XML
Image XML parsing0.00040.062120.0002
class_abstraction
Instantiating content class attribute0.00000.001310.0000
General
dbfile0.01111.6024210.0005
String conversion0.00000.000930.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1node/view/full.tplfull/forum_topic.tplextension/sevenx/design/simple/override/templates/full/forum_topic.tplEdit templateOverride template
1content/datatype/view/ezxmltext.tpl<No override>extension/community_design/design/suncana/templates/content/datatype/view/ezxmltext.tplEdit templateOverride template
5content/datatype/view/ezxmltags/paragraph.tpl<No override>extension/ezwebin/design/ezwebin/templates/content/datatype/view/ezxmltags/paragraph.tplEdit templateOverride template
3content/datatype/view/ezxmltags/literal.tpl<No override>extension/community/design/standard/templates/content/datatype/view/ezxmltags/literal.tplEdit templateOverride template
3content/datatype/view/ezxmltags/line.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/line.tplEdit templateOverride template
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 14
 Number of unique templates used: 6

Time used to render debug report: 0.0002 secs