我正在尝试将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源代码。
答案 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
看到我做了什么