NoMethodError: undefined method `add_rpc_operation' for nil:

FYI: this is in a Sinatra app. Don’t know if that matters though.

NoMethodError: undefined method add_rpc_operation' for nil:NilClass from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/rpc/httpserver.rb:95:inadd_rpc_method_as’
from
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/rpc/httpserver.rb:87:in
add_method' from ./soap_server/server.rb:8:ininitialize’
from (irb):5:in `new’
from (irb):5

I am running this in irb:

require ‘soap/rpc/standaloneServer’
require ‘soap_server/server’ # includes the SoapServer class
server = SoapServer.new(‘hws’, ‘urn:hws’, ‘127.0.0.1’, 6565)

SoapServer class looks like this:

require File.dirname(FILE) + ‘/…/vendor/gems/environment’
require “soap/rpc/standaloneserver”

begin
class SoapServer < SOAP::RPC::StandaloneServer
# Expose our services
def initialize(*args)
add_method(self, ‘add’, ‘a’, ‘b’)
add_method(self, ‘div’, ‘a’, ‘b’)
end

# Handler methods
def add(a, b)
  return a + b
end
def div(a, b)
  return a / b
end

end
rescue Exception => e
puts e.message
end

Ok I figured it out. Smallest change, but got it to work. Seems like
super is creating an object that wasn’t being created that the
initialize methods needs to run.

in the SoapServer class you need to add super before adding your
methods. It should look like this.

class SoapServer < SOAP::RPC::StandaloneServer

Expose our services

def initialize(*args)
super
add_method(self, ‘add’, ‘a’, ‘b’)
add_method(self, ‘div’, ‘a’, ‘b’)
end

Handler methods

def add(a, b)
return a + b
end
def div(a, b)
return a / b
end
end