2010-07-28 6 views
0

J'utilise une classe qui accepte méthodes surchargées je voulais dire les signatures argument optionnel (pas sûr si ce qui compte dans ce cas, mais peut-être)JRuby: classe java accepte les arguments dans la CISR, mais renvoie l'erreur lorsqu'elle est appelée à partir d'une classe

quand j'appelle cela de la CISR, il fonctionne comme prévu, par exemple, il accepte les arguments

(espaces de noms de filtrage et des mots de passe avec [filtré] si nécessaire pour garder le secret de choses secrètes et ma compagnie heureux)

jruby-1.5.0 > require 'java' 
=> true 

jruby-1.5.0 > Dir.glob('lib/java/*.jar').each{|jar| require jar} 
=> ["lib/java/[filtered].jar", "lib/java/[filtered].jar", "lib/java/[filtered].jar"] 

jruby-1.5.0 > import "[filtered].His351n1" 
=> Java::[filtered]::His351n1 

jruby-1.5.0 > broker = [filtered].Broker.new('[filtered]', '[filtered]') 
=> #<Java::[filtered]::Broker:0x4c4936f3> 

jruby-1.5.0 > rpc = "[filtered]" 
=> "[filtered]" 

jruby-1.5.0 > his = His351n1.new(broker, rpc) 
=> #<Java::[filtered]::His351n1:0x7fb6a1c4> 

et voici mon spec et le code correspondant

before(:each) do 
    @base = Legacy::Base.new 
end 

it "should create a valid his351n1 object" do 
    his = @base.create_his351n1 
    puts his.inpsect 
end 

# from within Legacy::Base 
def create_his351n1 
    his = His351n1.new(build_broker, rpc) 
end 

et enfin, l'erreur qui échoue sur l'appel à His351n1.new

1) 
ArgumentError in 'Legacy::Base should create a valid his351n1 object' 
wrong # of arguments(2 for 0) 

Pour compliquer les choses, le RIR, c'est aussi apparemment valide:

jruby-1.5.0 > his = His351n1.new 
=> #<Java::[filtered]::His351n1:0x5ad3c69c> 

, voici également les méthodes java surchargées

public His351n1() { 
    super(); 
} 

public His351n1(Broker broker) { 
    this(broker, DEFAULT_SERVER); 
} 

public His351n1(BrokerService bs) { 
    this(bs.getBroker(), bs.toString()); 
} 

public His351n1(Broker broker, String serverAddr) { 
    super(broker, serverAddr, "string", true); 
} 

public His351n1(final Broker broker, final String serverAddr, final String library) 
{ 
    super(broker, serverAddr, library, true); 
} 

Répondre

0

il semble que vous devez exiger de l'espace de noms dans toute l'instanciation de l'objet aka:

his = Java::[filtered_namesapce]::His351n1.new(build_broker, rpc)