Re: [SOAP] Cannot find encoding
[email protected] (Richard Quadling) Mon, 9 May 2011 13:27:35 +0100
| Newsgroups | php.soap |
|---|---|
| Message-ID | <[email protected]> |
On 9 May 2011 12:50, Finn Gruwier Larsen <[email protected]> wrote: > 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 > > I think the params are incorrect. public function getLegalUnit(GetLegalUnitRequestType $getRequest) class GetLegalUnitRequestType { public $LegalUnitIdentifier; // LegalUnitIdentifierType public $level; // LevelType } class LegalUnitIdentifierType { } class LevelType { } The complex types of LegalUnitIdentifierType and LevelType don't seem to be right for wsdl2php (the class builder I use - sourceforge). Using the array method, then maybe ... array('LegalUnitIdentifierType' => 'xxx', 'Level' => nnn) may be a better. The wsdl2php isn't perfect and doesn't seem to handle the external xsds. -- Richard Quadling Twitter : EE : Zend @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY