如何在JRuby中实现接口和初始化java之类的对象?
我不知道如何用JRuby中的JAVA类初始化接口对象 在下面的代码中,OAuthService是接口,ServiceBuilder是类 爪哇语:如何在JRuby中实现接口和初始化java之类的对象?,java,ruby,interface,jruby,Java,Ruby,Interface,Jruby,我不知道如何用JRuby中的JAVA类初始化接口对象 在下面的代码中,OAuthService是接口,ServiceBuilder是类 爪哇语: OAuthService service = new ServiceBuilder() System.out.println(">>>>>>>" + service.getClass()); Output >> class org.scribe.oauth.OAuth20ServiceImpl 但
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>
我非常确定您给出的java示例没有打印出
类org.scribe.oauth.OAuth20ServiceImpl
。原因是java语句newServiceBuilder()
必须返回ServiceBuilder的实例
如果您从提供的链接复制了代码,那么生成输出的java代码实际上是
OAuthService service = new ServiceBuilder()
.provider(FacebookApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback("http://www.example.com/oauth_callback/")
.build();
System.out.println(">>>>>>>" + service.getClass());
现在应该很清楚为什么ruby代码会打印出不同的东西,ruby代码应该是
service = ServiceBuilder.new().provider(FacebookApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback("http://www.example.com/oauth_callback/")
.build()
puts service.java_class
我认为您的问题是您需要使用
java\u class
调用提供商:
service = ServiceBuilder.new().provider(FacebookApi.java_class)
.api_key(api_key)
.api_secret(api_secret)
.callback("http://localhost:3000/oauth_callback/")
.build()
还有一些关于如何在JRuby中正确引用java.lang.Class
对象的详细信息
尽管如此,我认为这将解决你的问题,但也许有一个更简单的方法我们可以做到这一点
看起来您正在尝试在这里创建oauth消费者。出于好奇,为什么不使用Ruby oauth2 gem,它与JRuby完美配合
您可以在这里了解更多信息,但我认为这对您来说会容易得多:或者对于脸谱网来说,尤其考虑使用考拉:
用Ruby在Java中实现这一点而不是利用Ruby库实现这一点的基本原理是什么?为什么它不起作用?这对Java来说非常有效可能与服务是Java中的OAuthService有关?我已经尝试过这段代码。但当我试图访问构建方法时,它会返回错误。我认为内置的方法调用了一些属于OAuthService接口的方法,这导致了这个问题。如果您需要帮助,请发布您使用的实际代码以及您遇到的错误。细节越多越好。您发布的问题没有说明任何错误,并且在我的回答中没有包含代码。您确定代码产生了错误,我没有看到调用createService方法。build()方法本身调用createService方法。您得到的错误是jruby在build方法内找不到createService方法,无法获取未定义的方法异常
@graph = Koala::Facebook::API.new(oauth_access_token)
profile = @graph.get_object("me")
friends = @graph.get_connections("me", "friends")
@graph.put_connections("me", "feed", :message => "I am writing on my wall!")