0

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 内に含まれています。

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 に答える