0

我正在尝试将 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 的 jRuby 等价物是什么Interface variable = new Implementation(),即:

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 源代码。

4

2 回答 2

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'
于 2013-07-02T06:35:11.993 回答
0

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

于 2013-11-14T21:06:45.130 回答