2

ここにあるSNMP4J-AgentライブラリのJRubyラッパーの実装に取り​​組んでいます。

Web サイト: http://www.snmp4j.org/
JavaDocs: http://www.snmp4j.org/agent/doc/


ここまではとても楽しかったのですが、JRuby に実装する次の Java コードを解読するのに苦労しています。

server = new DefaultMOServer();
vacmMIB = new VacmMIB(new MOServer[] { server });

問題は、私が知る限り、(インターフェイスである) を使用してキャストnewするとMOServer[]、サーバー オブジェクトに渡される匿名関数が作成され、JRuby でそれを表現する正しい方法が見つからないようです。Java クラスに関する情報を含めました。


DefaultMOServerと定義されている

public class DefaultMOServer implements MOServer {
    public DefaultMOServer() {
       ...
    }
    ...
}

JavaDoc: http://www.snmp4j.org/agent/doc/org/snmp4j/agent/DefaultMOServer.html


VacmMIBと定義されている

public class VacmMIB implements MOGroup, MutableVACM {
    public VacmMIB(MOServer[] server) {
       this.server = server;
       ...
    }
    ...
}

JavaDoc: http://www.snmp4j.org/agent/doc/org/snmp4j/agent/mo/snmp/VacmMIB.html


最後に、MOServerは次のように定義されます。

public interface MOServer {
   ...
}

JavaDoc: http://www.snmp4j.org/agent/doc/org/snmp4j/agent/MOServer.html



JRubyで私がやっていることは大まかに次のとおりです。

require 'java'
require 'snmp4jruby'
require 'lib/snmp4j-agent-1.4.3.jar'

module Agent
    include_package 'org.snmp4j.agent'

    module MO
       include_package 'org.snmp4j.agent.mo'

       module SNMP
          include_package 'org.snmp4j.agent.mo.snmp'
       end
    end
end

class SnmpAgent < Agent::BaseAgent

    # Setup the agent
    def init
       ... everything works fine up here ...

       # Server is created early on without issue
       self.server = Agent::DefaultMOServer.new

       # Having trouble here
       _server = Agent::MOServer.new { self.server }
       self.vacmMIB = Agent::MO::SNMP::VacmMIB.new(_server)
    end

end

上記のコードを実行すると、設定した行で次のエラーが表示されますself.vacmMIB = ...

TypeError: failed to coerce org.jruby.gen.InterfaceImpl792882806 to [Lorg.snmp4j.agent.MOServer;



これに関する方向性は大歓迎です!

4

1 に答える 1

1

あなたの問題は、VacmMIBコンストラクターが引数としての配列を取りMOServer、のインスタンスを渡しているようですMOServer

これを試して:

_server = Agent::MOServer.new { self.server }
# your code
# self.vacmMIB = Agent::MO::SNMP::VacmMIB.new(_server) 
# updated code
self.vacmMIB = Agent::MO::SNMP::VacmMIB.new([_server]) 
于 2014-04-08T14:59:23.523 に答える