I’m working on an application where some of the business logic is
accessible with SOAP. I’ve used SOAP4R to generate everything and it
works splendid (I use http-access2 since we require https). Anyway, a
week ago, this stopped working, for no reason I can figure out. But it
just stopped working on my dev machine, not on our production_test
server or anything. I’m sitting on Windows 2003, and the stack trace
looks like this:
Bad file descriptor - connect(2) (, #0)
d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1391:in initialize' d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1391:in create_socket’
d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1352:in connect' d:/programming/ruby/lib/ruby/1.8/timeout.rb:56:in timeout’
d:/programming/ruby/lib/ruby/1.8/timeout.rb:76:in timeout' d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1351:in connect’
d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1209:in query' d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:892:in query’
d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:434:in do_get_block' d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:370:in conn_request’
d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:285:in request' d:/programming/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:264:in post’
d:/programming/ruby/lib/ruby/1.8/soap/streamHandler.rb:170:in send_post' d:/programming/ruby/lib/ruby/1.8/soap/streamHandler.rb:109:in old_send’
#{RAILS_ROOT}/vendor/lpw/lpw.rb:11:in send' d:/programming/ruby/lib/ruby/1.8/soap/rpc/proxy.rb:170:in route’
d:/programming/ruby/lib/ruby/1.8/soap/rpc/proxy.rb:141:in call' d:/programming/ruby/lib/ruby/1.8/soap/rpc/driver.rb:178:in call’
d:/programming/ruby/lib/ruby/1.8/soap/rpc/driver.rb:232:in getUserData' #{RAILS_ROOT}/app/models/address_information.rb:25:in fetch’
#{RAILS_ROOT}/app/models/lpw_object.rb:23:in fetch' #{RAILS_ROOT}/app/controllers/lpw_controller.rb:110:in addr’
d:/Programming/Ruby/bin/mongrel_rails:18
I would be very thankful for any help coming to terms with this.
I’m working on an application where some of the business logic is
accessible with SOAP. I’ve used SOAP4R to generate everything and it
works splendid (I use http-access2 since we require https). Anyway, a
week ago, this stopped working, for no reason I can figure out. But it
just stopped working on my dev machine, not on our production_test
server or anything. I’m sitting on Windows 2003, and the stack trace
looks like this:
Bad file descriptor - connect(2) (, #0)
Hmm. Trying to execute TCPSocket.new(nil, 0) here. Endpoint URL is
broken somewhere.
I’m using Soap4R 1.5.5. Regarding the old_send, that’s the result of
monkey_patching, since I add some big problems with another thing. Hmm.
old_send is just send renamed. But this shouldn’t be the problem, it
works on another machine and has worked on this machine. The monkey
patching looks like this:
module SOAP
class HTTPStreamHandler
alias :old_send :send
def send(endpoint_url, conn_data, soapaction = nil, charset = @charset)
ret = old_send(endpoint_url,conn_data,soapaction,charset)
if ret.receive_string =~ /.?(<?xml.?</soapenv:Envelope>).*?/m
ret.receive_string = $1
end
ret
end
end
end
and the reason that is is necessary can you find here:
Ola B. wrote:
Do your production and development environment both uses http proxy to
access foreign WS?
Hi,
Nope, no proxies anywhere. It’s a straight call through https to the
other machine.
Hmm. There must be an attachment interoperability problem. Can I see
entire response XML?
I don’t have it available right now, but I’ll dig after it. Suffice to
say, there was noise before <?xml (some kind of multipart structure,
maybe), and what looked like the complete PDF sent attached after (the
same data contained in a byte-array inside the SOAP-response)
I’m using Soap4R 1.5.5. Regarding the old_send, that’s the result of
monkey_patching, since I add some big problems with another thing. Hmm.
old_send is just send renamed. But this shouldn’t be the problem, it
works on another machine and has worked on this machine. The monkey
patching looks like this:
[snip]
Agreed. No suspicious part in old_send.
I think “Bad file descriptor - connect(2) (, #0)” is caused by
TCPSocket.new(“0.0.0.0”, 0). “0.0.0.0” and 0 is a default value of
accessing Site representation in http-access2. Site is used for
representing 1) destination http server and 2) http proxy server. And
for now, with regard to 1), there’s no suspicious part.
Do your production and development environment both uses http proxy to
access foreign WS?
Do your production and development environment both uses http proxy to
access foreign WS?
Nope, no proxies anywhere. It’s a straight call through https to the
other machine.
Hmmm. Then the destination site is suspicious but I cannot imagine what
is going on.
Can you add
$log = Logger.new(“http-access2.log”)
at the beginning of http-access2.rb and
$log.debug(site)
around Site object? I’ll send monkey-patched-http-access2.rb if you
want.
Hmm. There must be an attachment interoperability problem. Can I see
entire response XML?
I don’t have it available right now, but I’ll dig after it. Suffice to
say, there was noise before <?xml (some kind of multipart structure,
maybe), and what looked like the complete PDF sent attached after (the
same data contained in a byte-array inside the SOAP-response)
Sure. “noise before XML” and “noise between XML and PDF” are the point.
It may be a standard format which soap4r have not yet supported.
Regards,
// NaHi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)