jruby: класс Java принимает аргументы в IRB, но возвращает ошибку при вызове из класса - PullRequest
0 голосов
/ 28 июля 2010

Я использую класс, который принимает переопределенные методы Я имел в виду необязательные сигнатуры аргументов (не уверен, имеет ли это значение в этом случае, но возможно)

, когда явызовите его из IRB, он работает как положено, например, он принимает аргументы

(фильтрация пространств имен и паролей с помощью [отфильтровано], где это необходимо, чтобы сохранить секретные вещи в секрете и моя компания была счастлива)

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> 

и вот моя спецификация и соответствующий код

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

и, наконец, ошибка, которая не срабатывает при вызове His351n1.new

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

Чтобы усложнить ситуацию, на irb,это также очевидно верно:

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

Кроме того, вот переопределенные методы Java

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);
}

1 Ответ

0 голосов
/ 28 июля 2010

кажется, что вам нужно все пространство имен при создании объекта aka:

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

...