On Thu, Jun 13, 2013 at 5:56 PM, Matthew Ashton <matthew.ashton3@gmail.com> wrote:


---------- Forwarded message ----------
From: Matthew Ashton <matthew.ashton3@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@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 https://fedorahosted.org/suds/wiki/Documentation#LOGGING

looks like enabling the suds.transport logging would help a lot


On Thu, Jun 13, 2013 at 3:45 AM, Surya Kasturi <kasturisurya@gmail.com> wrote:



On Wed, Jun 12, 2013 at 5:26 PM, Matthew Ashton <matthew.ashton3@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@gmail.com> wrote:



On Wed, Jun 12, 2013 at 12:57 AM, Matthew Ashton <matthew.ashton3@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@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@gmail.com> wrote:



On Tue, Jun 11, 2013 at 7:42 PM, Matthew Ashton <matthew.ashton3@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@gmail.com> wrote:



On Tue, Jun 11, 2013 at 7:21 PM, Matthew Ashton <matthew.ashton3@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@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@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@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@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.WebServiceHttpSoap11Endpoint/"/>
    </wsdl:port>
   <wsdl:port name="WebServiceHttpSoap12Endpoint" binding="ns:WebServiceSoap12Binding">
       <soap12:address location="http://localhost:8080/myserver/services/WebService.WebServiceHttpSoap12Endpoint/"/>
   </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



_______________________________________________
suds mailing list
suds@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/suds

Okay..

One think I notice is that, when ever I invoke the client method, I see some log going on the Server side... I guess, the method is invoking the server..
The below is the error on server side..

can you tell me onething..

should I send file as

open(filepath, "rb") --or
open(filepath, "rb").read() ---> this one string.. how can we assume as attachment.

[ERROR] org/apache/james/mime4j/MimeException
java.lang.NoClassDefFoundError: org/apache/james/mime4j/MimeException
    at org.apache.axiom.attachments.Attachments.<init>(Attachments.java:93)
    at org.apache.axis2.builder.BuilderUtil.createAttachments(BuilderUtil.java:592)
    at org.apache.axis2.builder.BuilderUtil.createAttachmentsMap(BuilderUtil.java:543)
    at org.apache.axis2.builder.MIMEBuilder.processDocument(MIMEBuilder.java:39)
    at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:179)
    at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.james.mime4j.MimeException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    ... 22 more
[ERROR] org/apache/james/mime4j/MimeException
java.lang.NoClassDefFoundError: org/apache/james/mime4j/MimeException
    at org.apache.axiom.attachments.Attachments.<init>(Attachments.java:93)
    at org.apache.axis2.builder.BuilderUtil.createAttachments(BuilderUtil.java:592)
    at org.apache.axis2.builder.BuilderUtil.createAttachmentsMap(BuilderUtil.java:543)
    at org.apache.axis2.builder.MIMEBuilder.processDocument(MIMEBuilder.java:39)
    at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:179)
    at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.james.mime4j.MimeException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    ... 22 more