Re: RES: [SOAP] SOAP-ERROR: Couldn't Load from external entity (Whereendpoint resolves to another location)

[email protected] (fruitmixer) Tue, 02 Jul 2013 11:02:19 +1000
Newsgroups php.soap
Message-ID <[email protected]>
Hi Matt,

The imported WSDL name is arbitrary so I don't believe it would affect 
the outcome of this situation. As is the contents (I believe).

To be clear, I've been asked to use the following WSDL URL:

     [1] https://provider.web-service.domain/path/ServiceName?wsdl

There are two WSDLs at the following location

     [2] 
https://provider.web-service.domain/path/ServiceName/another/diff/path/prefix_ServiceName.wsdl
     [3] 
https://provider.web-service.domain/path/ServiceName/another/diff/path/ServiceName.wsdl

* [1] resolves to [2]; Then
* [2] imports [3]

When passing [1]  into SoapClient(), it FATALs (as described earlier)

When passing [2] into SoapClient(), it works.


- superspace



On 02/07/13 04:25, Matt Kynx wrote:
> Is the name of the imported wsdl really the same as the wsdl file that's importing it, like in your example?
>
> Have you tried copying the file and import down locally and trying from there? Failing that, can you point to a (simplified, anonymised) wsdl that reproduces the problem?
>
> Fwiw, I think the interop guidelines discourage the use of imports, but if it's not your wsdl there won't be much you can do about that...
>
> Matt
>
> Sent from the thing in my pocket
>
> On 1 Jul 2013, at 02:31, fruitmixer<[email protected]>  wrote:
>
>> Sorry that does not help.
>>
>> To iterate, when instantiating the client:
>>
>>     $wsdl = 'https://provider.web-service.domain/path/ServiceName?wsdl';
>>     $client = new SoapClient($wsdl);
>>
>> I get the following error:
>>
>> PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://provider.web-service.domain/path/ServiceName.wsdl' :failed to load external entity "https://provider.web-service.domain/path/ServiceName.wsdl"
>>
>>
>> - superspace
>>
>>
>>
>> On 28/06/13 21:35, Gerson Czelusniak Junior wrote:
>>> Hi,
>>>
>>> When i call SOAP WebService created with .NET APP using SoapClient PHP the code stay like this:
>>>
>>>         ini_set('display_errors', true);
>>>         ini_set("soap.wsdl_cache_enabled", "0");
>>>         error_reporting(E_ALL);
>>>         $url = "servidor/WebService.asmx?WSDL";
>>>         $soap = new soapClient($url, array('encoding'=>'UTF-8'));
>>>         $param = $_POST['param'];
>>>         $return = $soap->MethodFromWebService(array("param" =>   $param));
>>> Maybe that can help you.
>>>
>>> -----Mensagem original-----
>>> De: superpspace [mailto:[email protected]]
>>> Enviada em: quinta-feira, 27 de junho de 2013 21:57
>>> Para: [email protected]
>>> Assunto: RES: [SOAP] SOAP-ERROR: Couldn't Load from external entity (Where endpoint resolves to another location)
>>>
>>> 1. I believe the webservice is a .NET APP.
>>> 2. When requesting the WSDL from the browser I can see the XML.
>>> But since the XML is not trying to import the secondary WSDL, there is no errors/issues.
>>>
>>> "Gerson Czelusniak Junior"  wrote in message news:80940D84E43C0C45AA2C4A9B432B675A19D03520@SN2PRD0202MB120.namprd02.prod.outlook.com...
>>>
>>> Good Morning,
>>>
>>> Your webservice is in .NET APP or in PHP?
>>> When you call the WSDL from Browser you can see the xml?
>>>
>>>
>>> -----Mensagem original-----
>>> De: superpspace [mailto:[email protected]] Enviada em: terça-feira, 25 de junho de 2013 22:23
>>> Para: [email protected]
>>> Assunto: [SOAP] SOAP-ERROR: Couldn't Load from external entity (Where endpoint resolves to another location)
>>>
>>> Hello everyone,
>>>
>>> I have a WSDL in the following URL format (obscured):
>>>
>>>      https://provider.web-service.domain/path/ServiceName?wsdl
>>>
>>> that resolves to:
>>>
>>>      https://provider.web-service.domain/path/ServiceName/another/diff/path/prefix_ServiceName.wsdl
>>>
>>> The WSDL has a line like this:
>>>
>>>      <wsdl:import namespace="http://name/space/service/"
>>> location="ServiceName.wsdl"></wsdl:import>
>>>
>>> When loading the former URL into SoapClient, it complains like so:
>>>
>>>      PHP Fatal error:  SOAP-ERROR: Parsing WSDL:
>>>      Couldn't load from
>>> 'https://provider.web-service.domain/path/ServiceName.wsdl' :
>>>      failed to load external entity
>>> "https://provider.web-service.domain/path/ServiceName.wsdl"
>>>
>>> The reason i believe this happens is because it's trying to look for ServiceName.wsdl at the original location,
>>>
>>> ie. It is looking here:
>>>
>>>      https://provider.web-service.domain/path/ServiceName.wsdl
>>>
>>> instead of the final resolved location, here:
>>>
>>>      https://provider.web-service.domain/path/ServiceName/another/diff/path/ServiceName.wsdl
>>>
>>> As expected, if i pass the resolved URL into SoapClient, it works.
>>>
>>> This is not ideal because the resolved address can potentially change at any time.
>>>
>>> Is this a problem with SoapClient that can *and* need to be resolved?
>>>
>>> Your thoughts. Thanks
>>>
>>> superspace
>>>
>>>
>>>
>>> The question on stackoverflow is here:
>>>
>>>      http://stackoverflow.com/questions/17226451/php-soapclient-couldnt-load-from-external-entity-where-endpoint-resolves-to-a
>>>
>>> --
>>> PHP Soap Mailing List (http://www.php.net/) To unsubscribe, visit:
>>> http://www.php.net/unsub.php
>>>
>>>
>>>
>>> --
>>> PHP Soap Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
>>
>> --
>> PHP Soap Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>