jruby无法从jar加载java类

时间:2013-06-30 05:41:01

标签: java ruby-on-rails jruby amazon-mws

我正在尝试将amazon-merchant-web-service-java-sdk包装在jruby中,用于jruby-on-rails项目。

在我的测试中,我能够实例化一些类......

require 'java'
require 'lib/MaWSJavaClientLibrary-1.1.jar'

module MWS
  include_package 'com.amazonaws.mws'
  include_package 'com.amazonaws.mws.model'
end

config = MWS::MarketplaceWebServiceConfig.new  #this works!!

......但不是其他人

client = MWS::MarketplaceWebServiceClient.new  #this does NOT work!!!
NameError: MarketplaceWebServiceClient not found in packages com.amazonaws.mws, com.amazonaws.mws.model; last error: cannot load Java class com.amazonaws.mws.model.MarketplaceWebServiceClient
const_missing at file:/Users/...

为什么找不到?可能是因为,它是一个接口的实现:

public  class MarketplaceWebServiceClient implements MarketplaceWebService

有趣的是我可以实例化接口而不是实现:

service = MWS::MarketplaceWebService.new # does not throw an error

由于接口没有构造函数,因此没有意义。该实现有3个具有不同参数的构造函数。但是我如何调用它们呢?

java的Interface variable = new Implementation()的jRuby等价物是什么,即:

MarketplaceWebService service = new MarketplaceWebServiceClient(
            accessKeyId, secretAccessKey, appName, appVersion, config);

或者这只是一个导入问题而且我还没有正确地提供课程?任何建议表示赞赏。感谢。

编辑:撰写本文时的java sdk可在以下位置找到:https://developer.amazonservices.com/doc/bde/feeds/v20090901/java.html/182-0022359-5036344

jar包含在zip中,以及java源代码。

2 个答案:

答案 0 :(得分:0)

似乎将Java类包装在模块中会出现更详细的错误消息。我可以通过拨打这个电话进行调试:

client = Java::ComAmazonawsMws::MarketplaceWebServiceClient.new  

似乎你错过了一些依赖关系。尝试将这些添加到顶部:

require 'third-party/httpcore-4.2/httpcore-4.2.jar'
require 'third-party/httpclient-4.2/httpclient-4.2.jar'
require 'third-party/commons-httpclient-3.0.1/commons-httpclient-3.0.1.jar'
require 'third-party/commons-logging-1.1/commons-logging-1.1.jar'

答案 1 :(得分:0)

我已经开始为MWS访问创建一个简单的JRuby GEM。你可以在https://github.com/integrallis/jruby-amazon-mws

看到我做了什么