【问题标题】:Call APIs from different Salesforce SOAP jars in one project从一个项目中的不同 Salesforce SOAP jar 调用 API
【发布时间】:2015-11-03 08:44:11
【问题描述】:

我正在使用 Salesforce SOAP API 处理一个项目。我需要为项目中的不同 Salesforce 实例使用来自不同 SOAP API jar 的 java 类,但类名和它们的包名完全相同。

例如:

  • Salesforce 实例 A 的 jar 有 com.sforce.soap.enterprise.sobject.SObject.Opportunity,它有一个名为 attrA 的自定义属性;

  • Salesforce 实例B 的jar 有com.sforce.soap.enterprise.sobject.SObject.Opportunity,它有一个名为attrB 的自定义属性;

Maven 结构:

如何在我的单个项目中同时使用 attrAattrB?换句话说,如何分别识别具有相同包名和类名的不同类?

我是否必须将我的项目分成两个子项目才能使用两个 jar?

【问题讨论】:

  • 不,您不必拆分项目,需要以这种方式管理导入,即使您需要将它们都放在同一个类中,您也可以使用它们的 packageNames 来引用这些类以避免混淆。
  • 但是他们的包名也和截图一样。

标签: java soap salesforce


【解决方案1】:

你不能在 Java 中做到这一点。项目包名+类名必须是唯一的。

您可能需要重构您的项目,以便不同的 Salesforce JAR 位于它们自己的项目中,并且只向您的主项目公开必要的接口。唯一的其他选择是编写自定义类加载器,但这相当复杂。

package documentation here

开发人员应采取措施,通过为广泛分发的软件包选择唯一的软件包名称来避免两个已发布的软件包具有相同名称的可能性。这使得软件包可以轻松自动地安装和编目。本节指定了生成此类唯一包名称的建议约定。鼓励 Java 平台的实现为将一组包从本地和临时包名称转换为此处描述的唯一名称格式提供自动支持。

如果不使用唯一的包名,则包名冲突可能会在远离冲突包的创建点发生。这可能会造成用户或程序员难以或不可能解决的情况。 ClassLoader 类可用于将同名的包相互隔离,在这些情况下,包的交互受到限制,但对幼稚的程序不透明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多