2016-01-05 74 views
1
  • 我正在使用soap API調用使用Java的Apex服務方法。
    • 我已經使用合作伙伴API連接到salesforce組織。
    • 我已經爲編寫webservice方法的全局類準備好了WSDL。
    • 我已經轉換了該WSDL文件Jar文件。
    • 現在,雖然我已經將該jar文件添加到我的項目中,並且觸發該webservice方法被調用的事件。
    • 它工作正常,但我從包org中觸發該事件時,出現異常。

問題 我知道這個問題,問題是命名空間,但,我以前不知道如何解決它。Salesforce soap connection命名空間問題

這是我的示例代碼。

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

**這是對我的開發組織做工精細,但它是在包裝組織造成的問題**

**注:**從開發商組織生成WSDL文件。

+1

您可以發佈錯誤日誌嗎? – mimimito

回答

0

因此,您有一個使用webservice關鍵字將方法公開爲SOAP Web服務的Apex類?

當您將Apex類從您開發者版組織org發送到包裝組織時,它將拾取包裝組織的名稱空間。這改變了你需要呼叫的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:addresslocation屬性

    位置= 「https://na5.salesforce.com/services/Soap/class/ orgNamespace /識別TestClass」

端點位置應該相當容易處理。您只需更改端點URL即可在路徑中包含組織名稱空間。

targetNamespace和tns別名很難解決。最簡單的選擇可能是使用更新的名稱空間從WSDL重新創建jar。

另請參閱:Adding Namespace to Webservice Class Name

+0

嗨丹尼爾, 感謝您的快速響應。 重新創建jar文件是個好主意。 我已經綁定,它在包org中工作正常。 但是,然後,它不適用於開發者版組織。 我們能否務實地處理命名空間,以便我可以將該代碼用於開發人員版本組織和程序包版本組織。 在**夥伴api **中,我使用了稱爲** setCalloption()的方法來處理名稱空間。 'connection.setCallOption(clientName,namespce);' – Chintan

+0

可以實際更改此屬性嗎? – Chintan

+0

是的,我已經在AuthEndpoint和ServiceEndpoint中動態地添加了命名空間,但仍然遇到了問題。 我也檢查我的endpoins它已更新與namespcae正確。 類似於:https://NAMESPACE.serverURL/services/Soap/class/NAMESPACE/MyClass 更新該URL後,我收到了一個異常。 com.sforce.ws.SoapFaultException:沒有可用於請求的操作{http://soap.sforce.com/schemas/class/MyClass}。 – Chintan