2015-11-03 17 views
0

我正在使用Salesforce SOAP API處理項目。我需要在我的項目中使用來自不同SOAP API JAR的不同的Salesforce實例的Java類,但是類名和它們的包名完全相同。在一個項目中調用來自不同Salesforce SOAP Jar的API

例如:

  • 罐子的Salesforce實例的具有com.sforce.soap.enterprise.sobject.SObject.Opportunity,它具有稱爲ATTRA定製屬性; Salesforce的實例com.sforce.soap.enterprise.sobject.SObject.Opportunity,它有一個定製的屬性稱爲attrB

  • 罐;

Maven的結構:

enter image description here

我如何使用這兩種ATTRAattrB在我的一個項目?換句話說,如何分別識別具有相同包名和類名的不同類?

我是否必須將我的項目拆分爲兩個子項目才能使用兩個罐子?

+0

不,您不需要拆分項目,Imports需要這樣管理,即使您需要在同一個類中使用它們,也可以使用它們的packageNames來引用這些類,以避免混淆。 –

+0

但是他們的packageNames也和屏幕截圖一樣。 – JasonZhao

回答

2

你不能用Java來做到這一點。包名稱和類名對於項目必須是唯一的。

您可能需要重構項目,以便不同的Salesforce JAR位於其自己的項目中,並且只向主項目公開必要的接口。唯一的其他選擇是編寫自定義類加載器,但這相當複雜。

package documentation here

開發人員應該採取措施,以避免由該分佈廣泛的包選擇唯一包名的兩個同名發佈的數據包的可能性。這使軟件包可以輕鬆自動安裝和編目。本節指定了用於生成此類唯一程序包名稱的建議慣例。鼓勵Java平臺的實現提供自動支持,以將一組軟件包從本地和臨時軟件包名稱轉換爲此處描述的唯一名稱格式。

如果沒有使用唯一的軟件包名稱,那麼軟件包名稱衝突可能遠遠大於任何一個衝突軟件包的創建點。這可能會造成用戶或程序員解決困難或不可能的情況。 ClassLoader類可用於在包在包含約束交互的情況下將相同名稱的包彼此隔離,但不能以對天真程序透明的方式進行分離。