Re: [SOAP] Cannot find encoding

[email protected] (Finn Gruwier Larsen) Mon, 09 May 2011 13:50:13 +0200
Newsgroups php.soap
Message-ID <[email protected]>
Den 09-05-2011 13:08, Richard Quadling skrev:
> On 9 May 2011 11:48, Richard Quadling<[email protected]>  wrote:
>> On 9 May 2011 11:26, Finn Gruwier Larsen<[email protected]>  wrote:
>>> Den 09-05-2011 12:14, Richard Quadling skrev:
>>>>
>>>> On 9 May 2011 11:12, Finn Gruwier Larsen<[email protected]>    wrote:
>>>>>
>>>>> Den 09-05-2011 12:01, Richard Quadling skrev:
>>>>>>
>>>>>> On 9 May 2011 09:52, Finn Gruwier Larsen<[email protected]>      wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am trying to get a SOAP request working. At this line in my code:
>>>>>>>
>>>>>>> $info = $soapClient->__call("getLegalUnit", array($ap_param));
>>>>>>>
>>>>>>> I get this error:
>>>>>>>
>>>>>>> PHP Fatal error:  SOAP-ERROR: Encoding: Cannot find encoding in<file>
>>>>>>>   <line
>>>>>>> no>.
>>>>>>>
>>>>>>> What does "encoding" mean in this context, and how do I specify it?
>>>>>>>
>>>>>>> Best regards,
>>>>>>>
>>>>>>> Finn
>>>>>>>
>>>>>>> --
>>>>>>> PHP Soap Mailing List (http://www.php.net/)
>>>>>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> What parameters do you pass to the SOAPClient constructor?
>>>>>>
>>>>>> http://docs.php.net/manual/en/soapclient.soapclient.php
>>>>>>
>>>>>> "The encoding option defines internal character encoding. This option
>>>>>> does not change the encoding of SOAP requests (it is always utf-8),
>>>>>> but converts strings into it."
>>>>>>
>>>>>> I use these options (amongst others) ...
>>>>>>
>>>>>>                                                 'encoding'  =>
>>>>>>   'ISO-8859-1',
>>>>>>                                                 'exception' =>      True,
>>>>>>                                                 'trace'     =>      True,
>>>>>>
>>>>>> Richard.
>>>>>>
>>>>>
>>>>> I only passed the "trace =>    True" parameter.
>>>>>
>>>>> Passing the extra parameters above does not change anything. I also tried
>>>>> "encoding =>    'UTF-8'" with same result.
>>>>>
>>>>> Finn
>>>>>
>>>>
>>>> Can you show more code?
>>>>
>>>
>>> Sure.
>>>
>>> <?php
>>> // Create private key:
>>> $privateKey = openssl_pkey_new();
>>>
>>> // Create certificate signing request:
>>> $csr = openssl_csr_new(array('http://...'), $privateKey);
>>>
>>> // Get public key:
>>> $publicKey = openssl_csr_get_public_key($csr);
>>> // print_r(openssl_pkey_get_details($publicKey));
>>>
>>> // Create SOAP client:
>>> $params = array(
>>>             'trace' =>  True,
>>>             'encoding'  =>  'UTF-8',
>>>             'exception' =>  True);
>>> $soapClient = new SoapClient("LegalUnitGet_20080401.wsdl", $params);
>>>
>>> $ns = 'http://...';
>>>
>>> // Prepare SoapHeader parameters
>>> $sh_param = array(
>>>             'PrivateKey'    =>      $privateKey,
>>>             'PublicKey'    =>       $publicKey);
>>> $headers = new SoapHeader('http://...', 'Security', $sh_param);
>>>
>>> // Prepare Soap Client
>>> $soapClient->__setSoapHeaders(array($headers));
>>>
>>> // Setup the RemoteFunction parameters
>>> $ap_param = array(
>>>             'LegalUnitIdentifier'     =>      'xxxxxx',
>>>             'UserId'    =>      'xxxxx',
>>>             'Password'    =>      'xxxxx');
>>>
>>> $info = $soapClient->__getFunctions();
>>> print_r($info);
>>>
>>> // Call Remote Function ()
>>> $error = 0;
>>> try {
>>>     $info = $soapClient->__soapCall("getLegalUnit", array($ap_param));
>>> } catch (SoapFault $fault) {
>>>     $error = 1;
>>>     print("Faultcode: ".$fault->faultcode)."\n";
>>>     print("Faultstring: ".$fault->faultstring);
>>> }
>>>
>>> --
>>>
>>> Finn
>>>
>>
>> Is the file and line in the file you've shown? As you are using Soap
>> faults, is it possible that this is a server side error coming across
>> in the soap fault?
>> --
>> Richard Quadling
>> Twitter : EE : Zend
>> @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY
>>
>
> In looking at the possible cause of the error. The error is caused by
> a failure in a hash lookup in the function get_conversion()
> (php_encoding.c)
>
> In tracking that back to the callee for the function, the sort of
> calls being made are NOT to do with character encoding, but type
> encoding.
>
> e.g.
>
> Windows Grep Search Results
> 'get_conversion' in *.*: 33 matches in 5 files. 677 files searched. 0
> files skipped.
>
> Plain | File contents ü | File names ü | Line numbers ü | Whole line ü
> | Word wrap | Fixed Font | Match window: +/- 0ü | 1 | 2 | 3 | 4 | 5
> lines
>
> D:\BuildPHP\php53dev\vc9\x86\PHP_5_3\ext\soap\php_encoding.c
> 00403: enc = get_conversion(Z_LVAL_P(*ztype));
> 00471: encode = get_conversion(UNKNOWN_TYPE);
> 00561: encode = get_conversion(UNKNOWN_TYPE);
> 01277: zval* val = master_to_zval(get_conversion(XSD_ANYXML), node);
> 01296: zval* val2 = master_to_zval(get_conversion(XSD_ANYXML), node->next);
> 01767: enc = get_conversion(XSD_ANYXML);
> 02042: property = master_to_xml(get_conversion((*zprop)->type),
> (*zprop), style, xmlParam);
> 02075: enc = get_conversion(APACHE_MAP);
> 02077: enc = get_conversion(SOAP_ENC_ARRAY);
> 02081: enc = get_conversion(IS_NULL);
> 02204: xparam = master_to_xml(get_conversion((*zdata)->type),
> (*zdata), style, xmlParam);
> 02805: xparam = master_to_xml(get_conversion((*temp_data)->type),
> (*temp_data), style, item);
> 02868: enc = get_conversion(data->type);
> 02870: enc = get_conversion(IS_NULL);
> 02892: enc = get_conversion(IS_NULL);
> 02894: enc = get_conversion(IS_NULL);
> 02926: enc = get_conversion(SOAP_ENC_ARRAY);
> 02928: enc = get_conversion(XSD_STRING);
> 02932: enc = get_conversion(SOAP_ENC_OBJECT);
> 03223: encodePtr enc = get_conversion(XSD_ANYXML);
> 03581: encodePtr get_conversion(int encode)
> 03621: return get_conversion(XSD_ANYTYPE);
> 03683: return get_conversion(XSD_ANYTYPE);
> 03707: enc = get_conversion(cur_type);
>
> D:\BuildPHP\php53dev\vc9\x86\PHP_5_3\ext\soap\php_encoding.h
> 00208: encodePtr get_conversion(int encode);
>
> D:\BuildPHP\php53dev\vc9\x86\PHP_5_3\ext\soap\php_packet_soap.c
> 00194: zval *zv = master_to_zval(get_conversion(IS_STRING), tmp);
> 00201: zval *zv = master_to_zval(get_conversion(IS_STRING), tmp);
> 00224: zval *zv = master_to_zval(get_conversion(IS_STRING), tmp);
>
> D:\BuildPHP\php53dev\vc9\x86\PHP_5_3\ext\soap\php_schema.c
> 02210: type->encode = get_conversion(XSD_ANYXML);
>
> D:\BuildPHP\php53dev\vc9\x86\PHP_5_3\ext\soap\soap.c
> 01137: enc = get_conversion(UNKNOWN_TYPE);
> 04130: xmlNodePtr node = master_to_xml(get_conversion(IS_STRING),
> *tmp, SOAP_LITERAL, param);
> 04134: xmlNodePtr node = master_to_xml(get_conversion(IS_STRING),
> *tmp, SOAP_LITERAL, param);
> 04156: node = master_to_xml(get_conversion(IS_STRING), *tmp,
> SOAP_LITERAL, node);
>
>
> So, it looks more like the client is sending a type that no map exists for.
>
> At a guess.
>
> Can you provide the URL for the wsdl file?

http://archprod.service.eogs.dk/cvronline/metacvronline/LegalUnitGet_20080401.wsdl

Finn