JRuby で Java クラスを使用してインターフェイス オブジェクトを初期化する方法がわかりません。
以下のコードでは、OAuthService がインターフェイスで、ServiceBuilder がクラスです。
ジャワ ::
OAuthService service = new ServiceBuilder()
System.out.println(">>>>>>>" + service.getClass());
Output >> class org.scribe.oauth.OAuth20ServiceImpl
しかし、JRuby では、オブジェクトを初期化するための OAuthService インターフェイスをどこに記述すればよいかわかりません。
JRuby ::
service = ServiceBuilder.new()
puts service.java_class
Output >> class org.scribe.builder.ServiceBuilder
以下のコードは、JAVAで実行すると実行され、完全に機能します
OAuthService service = ServiceBuilder.new()
.provider(FacebookApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback("http://localhost:3000/oauth_callback/")
.build()
しかし、Rubyではエラーが発生します
エラー ::
irb(main):015:0> service = ServiceBuilder.new()
.provider(FacebookApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback("http://localhost:3000/oauth_callback/")
.build()
NoMethodError: undefined method `createService' for Class:Class
from org/jruby/gen/InterfaceImpl1679303904.gen:13:in `createService'
from (irb):15:in `evaluate'
from org/jruby/RubyKernel.java:1066:in `eval'
from org/jruby/RubyKernel.java:1409:in `loop'
from org/jruby/RubyKernel.java:1174:in `catch'
from org/jruby/RubyKernel.java:1174:in `catch'
from /home/krunal/.rvm/gems/jruby-1.7.3@integration_hub/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /home/krunal/.rvm/gems/jruby-1.7.3@integration_hub/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /home/krunal/.rvm/gems/jruby-1.7.3@integration_hub/gems/railties-3.2.13/lib/rails/commands.rb:41:in `(root)'
from org/jruby/RubyKernel.java:1027:in `require'
from script/rails:6:in `(root)'
irb(main):016:0>