---------- Forwarded message ----------
From: Matthew Ashton <matthew.ashton3(a)gmail.com>
Date: Thu, Jun 13, 2013 at 10:55 AM
Subject: Re: [Fedora-suds-list] Location attribute not found error
To: Surya Kasturi <kasturisurya(a)gmail.com>
It sounds like you may need to check the server that handles these SOAP
calls.
Perhaps you could see that requests / responses come through by checking
the client object after making a request, you print client.last_sent() and
client.last_received()
also, if you need to debug what suds is sending, it sounds like a great
opportunity to look in the debug section of the documentation
looks like enabling the suds.transport logging would help a lot
On Thu, Jun 13, 2013 at 3:45 AM, Surya Kasturi <kasturisurya(a)gmail.com>wrote:
On Wed, Jun 12, 2013 at 5:26 PM, Matthew Ashton <matthew.ashton3(a)gmail.com
> wrote:
> Wait, this line (it's line 75 in the unmodified file)
> request = Request(suds_method.client.location, request_text)
>
> needs to become
>
> request = Request(suds_method.method.location, request_text)
>
> because the location attribute is under the method attribute... of the
> suds method.
>
> The script was written 3 years ago so having things change over time
> makes sense.
>
>
> On Wed, Jun 12, 2013 at 4:24 AM, Surya Kasturi <kasturisurya(a)gmail.com>wrote:
>
>>
>>
>>
>> On Wed, Jun 12, 2013 at 12:57 AM, Matthew Ashton <
>> matthew.ashton3(a)gmail.com> wrote:
>>
>>> line 75 of
>>>
https://fedorahosted.org/suds/attachment/ticket/350/soap_attachments.2.py
>>> says
>>>
>>> request = Request(suds_method.client.location(), request_text)
>>>
>>> well the suds method (Which would be c.service.*something)* doesn't
>>> have a location attribute under client.
>>> instead it is under method, so it should be
>>>
>>> request = Request(suds_method.method.location, request_text)
>>>
>>>
>>> On Tue, Jun 11, 2013 at 5:47 PM, Matthew Ashton <
>>> matthew.ashton3(a)gmail.com> wrote:
>>>
>>>> No... see the documentation. I just wanted to make sure the client
>>>> objects was set up... so something like
>>>> from suds.client import Client
>>>> url="./abc?wsdl"
>>>> self.client = Client(url=url)
>>>>
>>>> works.
>>>>
>>>>
>>>> *location* This overrides the service port address *URL* defined in
>>>> the WSDL.
>>>>
>>>> The service port address defined in the WSDL should look like (here is
>>>> from fedex's testing wsdl)
>>>> <service name="ShipService">
>>>> <port name="ShipServicePort"
binding="ns:ShipServiceSoapBinding">
>>>> <s1:address location="
>>>>
https://wsbeta.fedex.com:443/web-services/ship"/>
>>>> </port>
>>>> </service>
>>>>
>>>> and I know why it's failing.. it's because there's no
.location()
>>>> under a client (line 75)... and I'm trying to find where you can
access it
>>>>
>>>>
>>>> On Tue, Jun 11, 2013 at 1:01 PM, Surya Kasturi
<kasturisurya(a)gmail.com
>>>> > wrote:
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Jun 11, 2013 at 7:42 PM, Matthew Ashton <
>>>>> matthew.ashton3(a)gmail.com> wrote:
>>>>>
>>>>>> location is a keyword argument attribute you can specify at the
>>>>>> creation of the client object used to make the service calls, or
change
>>>>>> later through a method call setlocation (
>>>>>>
http://jortel.fedorapeople.org/suds/doc/suds.wsdl.Service-class.html)
>>>>>>
>>>>>> According to the suds documentation (
>>>>>>
https://fedorahosted.org/suds/wiki/Documentation )
>>>>>> *location* This overrides the service port address *URL* defined
in
>>>>>> the WSDL. So I was just making sure you set up the client object
>>>>>> properly
>>>>>>
>>>>>>
>>>>>> On Tue, Jun 11, 2013 at 12:25 PM, Surya Kasturi <
>>>>>> kasturisurya(a)gmail.com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Jun 11, 2013 at 7:21 PM, Matthew Ashton <
>>>>>>> matthew.ashton3(a)gmail.com> wrote:
>>>>>>>
>>>>>>>> But the question was what did you do to fix the
'location' issue?
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jun 11, 2013 at 12:12 PM, Surya Kasturi <
>>>>>>>> kasturisurya(a)gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Thanks...
>>>>>>>>> We have used a similar method to send data as string
and its
>>>>>>>>> working! But the string is of size 250kb and we
don't want that large data
>>>>>>>>> to be sent as a single string
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Jun 11, 2013 at 5:27 PM, Matthew Ashton <
>>>>>>>>> matthew.ashton3(a)gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> I'm assuming you've properly set up the
client to make the web
>>>>>>>>>> service call? I'll look into the ticket you
linked.
>>>>>>>>>>
>>>>>>>>>> On Tue, Jun 11, 2013 at 7:43 AM, Surya Kasturi
<
>>>>>>>>>> kasturisurya(a)gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> I am using with_soap_attachment() mentioned
at
>>>>>>>>>>>
https://fedorahosted.org/suds/ticket/350
>>>>>>>>>>>
>>>>>>>>>>> def sendFile(self, vehicleId, filePath):
>>>>>>>>>>> uploadFileMethod =
self.client.service.uploadFile
>>>>>>>>>>> attachment_id =
hashlib.sha256(filePath).hexdigest()
>>>>>>>>>>> attachment_content = (filePath,
attachment_id)
>>>>>>>>>>>
with_soap_attachment(uploadGpxFileMethod,
>>>>>>>>>>> attachment_content)
>>>>>>>>>>>
>>>>>>>>>>> this what my method is..
>>>>>>>>>>>
>>>>>>>>>>> Now, I am getting the error
>>>>>>>>>>>
>>>>>>>>>>> AttributeError: 'Client' object has
no attribute 'location'
>>>>>>>>>>> Error: tcpip::Socket::recvAndCheck @ recv:
peer shutdown
>>>>>>>>>>>
>>>>>>>>>>> SoapAttachment.py", line 75, in
with_soap_attachment
>>>>>>>>>>>
>>>>>>>>>>> So, how to fix it?? I need to attach file and
send it..As this
>>>>>>>>>>> interface needs to be done asap it would be
nice if someone can let me know
>>>>>>>>>>> what is the issue here
>>>>>>>>>>>
>>>>>>>>>>> thanks
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
_______________________________________________
>>>>>>>>>>> suds mailing list
>>>>>>>>>>> suds(a)lists.fedoraproject.org
>>>>>>>>>>>
https://admin.fedoraproject.org/mailman/listinfo/suds
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>> the location attribute line was something like
>>>>>>>
>>>>>>> suds_method.client.location() which is supposed to work and
since
>>>>>>> the attr is not present, its raising.
>>>>>>>
>>>>>>> So, I manually edited that argument and replaced with the
server
>>>>>>> wsdl url
>>>>>>> ( I am quite new in the team and new to soap.. I hope its
right!!
>>>>>>> putting wsdl url)
>>>>>>>
>>>>>>> but, after that its raising error. "internal server
fault" or
>>>>>>> something.. I am away from the codebase now and thus
can't give you
>>>>>>> appropriate details :(
>>>>>>>
>>>>>>
>>>>>>
>>>>> Okay, as far as I remember (I don't have code base right now)
>>>>>
>>>>> the Client instance is created like this
>>>>>
>>>>> url = "localhost://...//abc?wsdl"
>>>>> self.client = Client(url)
>>>>>
>>>>> and you are saying that we can do something like
>>>>>
>>>>> self.client = Client(location = url)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>> First let me give you some clear picture!
>>
>> The client program (Python) instance is something like this
>>
>> def __init__(self):
>> self.initClient()
>>
>> def initClient(self):
>> try:
>> self.client = Client(url)
>> except:
>> ..
>>
>> This is where I am actually calling the remote method
>>
>> def sendLogFile(self, filePath):
>> import hashlib
>>
>> uploadFileMethod = self.client.service.uploadFile
>> attachment_id = hashlib.sha256(filePath).hexdigest()
>> attachment_mimetype = "text/plain"
>> attachment_content = (filePath, attachment_id,
>> attachment_mimetype)
>> with_soap_attachment(uploadFileMethod, attachment_content)
>>
>> This is raising
>>
>>
>> AttributeError: 'Client' object has no attribute 'location'
>> Error: tcpip::Socket::recvAndCheck @ recv: peer shutdown
>> Quitting (on error).
>>
>> On the server side, which is written in JSP, has a method
>>
>> String uploadFile(File logFile);
>>
>> and the WSDL definitions something like below
>>
>> <wsdl:service name="WebService">
>> <wsdl:port name="WebServiceHttpSoap11Endpoint"
>> binding="ns:WebServiceSoap11Binding">
>> <soap:address location="
>>
http://localhost:8080/myserver/services/WebService.WebServiceHttpSoap11En...
>>
>> </wsdl:port>
>> <wsdl:port name="WebServiceHttpSoap12Endpoint"
>> binding="ns:WebServiceSoap12Binding">
>> <soap12:address location="
>>
http://localhost:8080/myserver/services/WebService.WebServiceHttpSoap12En...
>> "/>
>> </wsdl:port>
>> <wsdl:port name="WebServiceHttpEndpoint"
>> binding="ns:WebServiceHttpBinding">
>> <http:address location="
>>
http://localhost:8080/myserver/services/WebService.WebServiceHttpEndpoint/
>> "/>
>> </wsdl:port>
>> </wsdl:service>
>>
>>
>> I guess I have created the Client() instance succesfully but its raising
>> the above mentioned errors.
>>
>>
>> As per your previous message, I even changed the line 77 in
>> with_soap_attachment to
>>
>> request = Request(suds_method.client.location, request_text)
>>
>>
>> Thanks for your valuable time.
>>
>>
>
Hey, thanks.. but there seems to be other errors raising too.
This is the method I am running
def sendFile(self, filePath):
uploadFileMethod = self.client.service.uploadFile
attachment_id = uuid.uuid4()
attachment_mimetype = "text/plain"
attachment_content = (open(filePath, "rb"), attachment_id,
attachment_mimetype)
with_soap_attachment(uploadFileMethod, attachment_content)
I am getting this error
File "soap_attachments.py", line 69, in with_soap_attachment
'--%s--' % boundary_id
TypeError: sequence item 6: expected string, file found
My remote method is this
String uploadFile(File my_file);
I don't understand why its not taking the file object
But, anyway, I changed the method above mentioned line5 to
attachment_content = (open(filePath, "rb").read(), attachment_id,
attachment_mimetype)
The below line sends the string!!
Now, I am getting this error
File
"/usr/local/lib/python2.7/dist-packages/suds-0.4-py2.7.egg/suds/transport/https.py",
line 64, in send
return HttpTransport.send(self, request)
File
"/usr/local/lib/python2.7/dist-packages/suds-0.4-py2.7.egg/suds/transport/http.py",
line 85, in send
raise TransportError(e.msg, e.code, e.fp)
suds.transport.TransportError: Internal Server Error
Error: tcpip::Socket::recvAndCheck @ recv: peer shutdown
Quitting (on error).
Thanks a lot for your time!!
Surya