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:in
`add_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:in `initialize'
  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

···

--
Posted via http://www.ruby-forum.com/.

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

···

--
Posted via http://www.ruby-forum.com/.