jruby-on-rails プロジェクトのために、amazon-merchant-web-service-java-sdk を jruby でラップしようとしています。
私のテストでは、いくつかのクラスをインスタンス化できます....
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 は、Java ソース コードとともに zip 内に含まれています。