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