2013-06-30 134 views
0

我正在嘗試在jruby中打包jruby-on-rails項目中的amazon-merchant-web-service-java-sdk。jruby無法從jar加載java類

在我的測試,我能夠實例化一些類....

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個具有不同參數的構造函數。但我該如何援引他們呢?

什麼是JRuby的相當於Java的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

該罐包含在拉鍊中,與Java源代碼。

+0

我做的似乎無法在網上找到那個罐子。是可用的麼? – Rob

+0

對不起,我應該包含一個鏈接。我忘記了亞馬遜開發人員的資源有時會找到。 https://developer.amazonservices.com/doc/bde/feeds/v20090901/java.html/182-0022359-5036344 – Homan

+0

你試過我的建議嗎? – Rob

回答

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'