Re: Cannot find encoding

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Den 09-05-2011 14:27, Richard Quadling skrev:
On 9 May 2011 12:50, Finn Gruwier Larsen<finn@gruwier.dk>  wrote:
Den 09-05-2011 13:08, Richard Quadling skrev:

On 9 May 2011 11:48, Richard Quadling<rquadling@gmail.com>    wrote:

On 9 May 2011 11:26, Finn Gruwier Larsen<finn@gruwier.dk>    wrote:

Den 09-05-2011 12:14, Richard Quadling skrev:

On 9 May 2011 11:12, Finn Gruwier Larsen<finn@gruwier.dk>      wrote:

Den 09-05-2011 12:01, Richard Quadling skrev:

On 9 May 2011 09:52, Finn Gruwier Larsen<finn@gruwier.dk>        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.




That is definately a possibility. Thanks for looking into it.

Finn

--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux