[Fedora-suds-list] Python suds client -> php service -- inputStringArray problem
Jeff Ortel
jortel at redhat.com
Tue Sep 7 14:15:17 UTC 2010
Hey Jerry.
I can be more help if I can see the wsdl. But, I suspect that you need to just pass the
values for parameters of type 'inputStringArray' as a list of strings. Encoded arrays are
an overly complicated construct in soapenc which suds simplified around 0.3.8. I thought
I documented this on the wiki but guess not. I'll make this clearer when I get a chance.
try something like:
tokens = ['{token1}', '{token2}']
values = ['elmer.fudd', 'some_link.com']
text = soap.service.sendMailTemplate(mto, mfrom, msubject, mtemplate, tokens, values,
False, True)
Notice, I did not use the factory to create an 'inputStringArray'.
Hope this helps. If not please provide the wsdl and I'll walk through it.
Regards,
Jeff
On 09/03/2010 03:25 PM, Jerry Davis wrote:
> Ok. I am a wits end here.
>
> We have a php service, some of the methods use something in php called a
> inputStringArray
>
> I have filled out the inputStringArray's and and php does not like it. I can
> send a ONE item array, but not TWO or more.
>
> Note: In the following pay attention to the tokens and values, which are
> inputStringArray's.
>
> -------------------------
> Python client code:
>
> tokens = soap.factory.create('inputStringArray')
> tokens.item = ['{token1}', '{token2}']
>
> values = soap.factory.create('inputStringArray')
> values.item = ['elmer.fudd', 'some_link.com']
>
> dosendmail = True
>
> #sendMailTemplate(xs:string to,
> # xs:string from,
> # xs:string subject,
> # xs:string template_name,
> # inputStringArray replace_tokens,
> # inputStringArray replace_values,
> # xs:boolean html,
> # xs:boolean output, )
>
> import logging
> logging.basicConfig(level=logging.DEBUG)
> logging.getLogger('suds.client').setLevel(logging.DEBUG)
>
> text = soap.service.sendMailTemplate(mto, mfrom, msubject, mtemplate,
> tokens, values, False, True)
>
> The SOAP message that gets sent is:
>
> MESSAGE:
> <SOAP-ENV:Envelope xmlns:ns3="http://www.w3.org/2001/XMLSchema"
> xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns0="http://schemas.xmlsoap.org/ soap/encoding/"
> xmlns:ns1="urn:myservice"
> xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-
> ENV="http://schemas.xmlsoap.org/soap/envelope/"
> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> <SOAP-ENV:Header/>
> <ns2:Body>
> <ns1:sendMailTemplate>
> <to xsi:type="ns3:string">my at emailaddress.com</to>
> <from xsi:type="ns3:string">my at emailaddress.com</from>
> <subject xsi:type="ns3:string">test from sendmail.py</subject>
> <template_name
> xsi:type="ns3:string">ldap_usr_reset_template</template_name>
> <replace_tokens xsi:type="ns1:inputStringArray">
> <item xsi:type="ns3:string">{token1}</item>
> <item xsi:type="ns3:string">{token2}</item>
> </replace_tokens>
> <replace_values xsi:type="ns1:inputStringArray">
> <item xsi:type="ns3:string">elmer.fudd</item>
> <item xsi:type="ns3:string">some_link.com</item>
> </replace_values>
> <html xsi:type="ns3:boolean">false</html>
> <output xsi:type="ns3:boolean">true</output>
> </ns1:sendMailTemplate>
> </ns2:Body>
> </SOAP-ENV:Envelope>
> DEBUG:suds.transport.http:received:
> CODE: 200
>
> -----------------------------
>
> php client code:
>
> $text .= $client->call('sendMailTemplate',
> array('to' => 'my at emailaddress.com',
> 'from' => 'my at emailaddress.com',
> 'subject' => 'Test Template SOAP API',
> 'template_name' => 'ldap_usr_reset_template',
> 'replace_tokens' => array('{token1}', '{token2}'),
> 'replace_values' => array('elmer.fudd', 'some_link.com'),
> 'html' => false,
> 'output' => true));
>
> Here is the request:
>
> POST blahblah.php?wsdl HTTP/1.0
> Host: ahost-mbp:10088
> User-Agent: NuSOAP/0.9.5 (1.123)
> Content-Type: text/xml; charset=ISO-8859-1
> SOAPAction: ""
> Authorization: Basic blah
> Content-Length: 1228
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <SOAP-ENV:Envelope
> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
> <SOAP-ENV:Body>
> <ns4007:sendMailTemplate xmlns:ns4007="http://tempuri.org">
> <to xsi:type="xsd:string">my at emailaddress.com</to>
> <from xsi:type="xsd:string">my at emailaddress.com</from>
> <subject xsi:type="xsd:string">Test Template SOAP API</subject>
> <template_name
> xsi:type="xsd:string">ldap_usr_reset_template</template_name>
> <replace_tokens xsi:type="SOAP-ENC:Array"
> SOAP-ENC:arrayType="xsd:string[2]">
> <item xsi:type="xsd:string">{token1}</item>
> <item xsi:type="xsd:string">{token2}</item>
> </replace_tokens>
> <replace_values xsi:type="SOAP-ENC:Array"
> SOAP-ENC:arrayType="xsd:string[2]">
> <item xsi:type="xsd:string">elmer.fudd</item>
> <item xsi:type="xsd:string">some_link.com</item>
> </replace_values>
> <html xsi:type="xsd:boolean">0</html>
> <output xsi:type="xsd:boolean">1</output>
> </ns4007:sendMailTemplate>
> </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
>
>
> -------------------------
> Comparison of python vs. php code as far as tokens and values is concerned
>
> python:
>
> <replace_tokens xsi:type="ns1:inputStringArray">
> <item xsi:type="ns3:string">{token1}</item>
> <item xsi:type="ns3:string">{token2}</item>
> </replace_tokens>
> <replace_values xsi:type="ns1:inputStringArray">
> <item xsi:type="ns3:string">elmer.fudd</item>
> <item xsi:type="ns3:string">some_link.com</item>
> </replace_values>
>
> php:
>
> <replace_tokens xsi:type="SOAP-ENC:Array"
> SOAP-ENC:arrayType="xsd:string[2]">
> <item xsi:type="xsd:string">{token1}</item>
> <item xsi:type="xsd:string">{token2}</item>
> </replace_tokens>
> <replace_values xsi:type="SOAP-ENC:Array"
> SOAP-ENC:arrayType="xsd:string[2]">
> <item xsi:type="xsd:string">elmer.fudd</item>
> <item xsi:type="xsd:string">some_link.com</item>
> </replace_values>
>
> There is no error at all, but the expected results do not come back. It is
> like the php service does not understand what I am sending it.
>
> And it all boils down to the inputStringArray.
>
> Does someone know what I am doing wrong?
>
> Jerry
>
> _______________________________________________
> suds mailing list
> suds at lists.fedoraproject.org
> https://admin.fedoraproject.org/mailman/listinfo/suds
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5126 bytes
Desc: S/MIME Cryptographic Signature
Url : http://lists.fedoraproject.org/pipermail/suds/attachments/20100907/a537a3a5/attachment-0001.bin
More information about the suds
mailing list