简体   繁体   中英

SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> in

I'm trying to consume a SOAP webservice from a distant server, the wsdl file is located here http://ecolinthcm.pi-asp.de/logaserver/services/UsersService?wsdl

I've been in touch with the developers there but they keep telling me that it works fine so they're not of great help...

I'm using this little piece of code to poke the bear see if it's alive :

$WSDL = "http://ecolinthcm.pi-asp.de/logaserver/services/UsersService?wsdl";

// the file_get_contents methods doesn't change the end result unfortunately
//$data = file_get_contents($WSDL);
//file_put_contents('./wsdl.xml',$data);
//$WSDL = './wsdl.xml';

$opts = array(
    'http'=>array(
        'user_agent' => 'PHPSoapClient'
        )
    );

$context = stream_context_create($opts);

$service = new SoapClient($WSDL,array('stream_context' => $context, 'cache_wsdl' => WSDL_CACHE_NONE));
$result = $service->ErmUserBean (array("UserID","Password","TargetUserID"));
print '<pre>';
    var_dump($result);
print '</pre>';

As said in the title I get this message in return :

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't find < definitions > in 'WSDL file URI' in C:\\Users\\username\\Documents\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\API\\index.php:30 Stack trace: #0 C:\\Users\\username\\Documents\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\API\\index.php(30): SoapClient->SoapClient('WSDL file URI', Array) #1 {main} thrown in C:\\Users\\username\\Documents\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\API\\index.php on line 30

I've read most post about this errors and therefore tried a lot of variation in my SOAP request. I've also edited my php.ini file so that the line

extension=php_openssl.dll

appears without ";" (comment) before as I could read here .

The error message you get is correct because the WSDL you linked to is invalid. You can download it and feed it to a WSDL validator (eg https://www.wsdl-analyzer.com/ ) and you will see it is invalid and fails with a similar validation message.

The WSDL is invalid because certain namespaces are wrong. For example, the namespace for the WSDL schema is not https://schemas.xmlsoap.org/wsdl/ and neither is https://www.w3.org/2001/XMLSchema the namespace for XML schema. The correct ones are with http:// not https:// .

I fixed the namespaces and uploaded a valid WSDL file here: http://filebin.ca/2lByBlPAOvCu/ChangedUsersService.xml . You can compare it with the original file which I saved here: http://filebin.ca/2lBxfIDsyDas/OriginalUsersService.xml and see the differences.

Try using my WSDL file. Feed it to the online validator and to your code and see if it works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM