0

I'm trying to wrap the amazon-merchant-web-service-java-sdk in jruby for a jruby-on-rails project.

In my test, I am able to instantiate some classes ....

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!!

... but not others

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/...

Why is it not found? Could it be because, it's an implementation of an interface :

public  class MarketplaceWebServiceClient implements MarketplaceWebService

Interesting that I can instantiate the interface but not the implementation:

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

That doesn't make sense since the the interface doesn't have a constructor. The implementation has 3 constructors having different arguments. But how do I invoke them?

What would be the jRuby equivalent of java's Interface variable = new Implementation(), ie:

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

Or is this just an import issue and I haven't correctly made the class available? Any advice is appreciated. Thanks.

EDIT: The java sdk, at the time of this writing can be found at: https://developer.amazonservices.com/doc/bde/feeds/v20090901/java.html/182-0022359-5036344

The jar is contained within the zip, along with the java source code.

Homan
  • 25,618
  • 22
  • 70
  • 107

2 Answers2

0

It seems that wrapping your Java class in a module supressed a more detailed error message. I was able to debug by making this call instead:

client = Java::ComAmazonawsMws::MarketplaceWebServiceClient.new  

It seems you're missing some dependencies. Try adding these to the top:

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'
Robert Brown
  • 10,888
  • 7
  • 34
  • 40
0

I've started the work to create a simple JRuby GEM for MWS access. You can see what I've done at https://github.com/integrallis/jruby-amazon-mws

BSB
  • 1,516
  • 13
  • 14