【问题标题】:Salesforce soap connection namespace issueSalesforce 肥皂连接命名空间问题
【发布时间】:2016-01-05 17:30:08
【问题描述】:
  • 我正在使用一个肥皂 API 来调用使用 Java 的 Apex 服务方法。
    • 我已经使用合作伙伴 API 连接到 salesforce org。
    • 我已经为编写 web 服务方法的全局类准备了 WSDL。
    • 我已经转换了那个 WSDL 文件 Jar 文件。
    • 现在,当我将该 jar 文件添加到我的项目中并触发调用 webservice 方法的事件时。
    • 它工作正常,但是当我从包 org 触发该事件时,我遇到了异常。

问题 我知道问题,问题是命名空间,但不知道如何解决。

这是我的示例代码。

SoapConnection globalUtilConnection = Connector.newConnection("","");
globalUtilConnection.getConfig().setAuthEndpoint(updatedServerURL.toString());
globalUtilConnection.getConfig().setServiceEndpoint(updatedServerURL.toString());
globalUtilConnection.setSessionHeader(activeSessionId);
globalUtilConnection.myWebServiceMethod();

**这对我的开发人员组织来说工作正常但是,它导致 Package org 出现问题**

**注意:** WSDL 文件由开发者组织生成。

【问题讨论】:

  • 可以贴出错误日志吗?

标签: java web-services soap wsdl salesforce


【解决方案1】:

那么,您有一个 Apex 类,它使用 webservice 关键字将方法公开为 SOAP Web 服务?

当您将 Apex 类从您的开发者版本组织带到打包组织时,它将获取打包组织的命名空间。这会更改您需要调用的 URL。

包装组织的命名空间将出现在 WSDL 中的一些地方。

  1. xmlns:tns 属性中

    xmlns:tns="http://soap.sforce.com/schemas/class/orgNamespace/TestClass"

  2. targetNamespace 属性中

    targetNamespace="http://soap.sforce.com/schemas/class/orgNamespace/TestClass"

  3. soap:address location 属性中

    location="https://na5.salesforce.com/services/Soap/class/orgNamespace/TestClass"

端点位置应该相当容易处理。您只需更改端点 URL 以在路径中包含 org 命名空间。

targetNamespace 和 tns 别名将更难解析。最简单的选择可能是使用更新的命名空间从 WSDL 重新创建 jar。

另见:Adding Namespace to Webservice Class Name

【讨论】:

  • 您好丹尼尔,感谢您的快速回复。重新创建 jar 文件是个好主意。我已经确定它在包 org 中运行良好。但是,在它不适用于开发人员版组织之后。我们能否务实地处理命名空间,以便我可以将该代码用于开发人员版 org 和包版 org。在 partner api 中,我使用了名为 **setCalloption() 的方法来处理命名空间。 connection.setCallOption(clientName,namespce);
  • 我可以务实地改变这个属性吗?
  • 是的,我已经在 AuthEndpoint 和 ServiceEndpoint 中动态添加了命名空间,但我仍然遇到了问题。我还检查了我的端点,它已使用名称空间正确更新。类似:NAMESPACE.serverURL/services/Soap/class/NAMESPACE/MyClass 更新该 URL 后,我遇到了异常。 com.sforce.ws.SoapFaultException:没有可用于请求 {soap.sforce.com/schemas/class/MyClass} 的操作。
  • @Chintan 那么使用打包组织中的 WSDL 的 jar 对那个组织有效,但对开发者版组织无效?这似乎是正确的,因为名称空间位于 URL 和 SOAP 请求的 targetNamespace 中。我会尝试对 JAR 中的 Java 类进行比较。您可能会找到您需要使用差异工具以编程方式切换的内容。
猜你喜欢
  • 2011-03-20
  • 2014-11-20
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
相关资源
最近更新 更多