Ich habe Probleme mit der Generierung von wsdl2apex-Code, hauptsächlich aufgrund der Verwendung von xs:import namespace
und xs:extension
in meiner WSDL.
Insbesondere sehe ich den Fehler System.CalloutException: Web service callout failed: Unable to parse callout response. Apex type not found for element . . .
. Die vom Web-Service zurückgegebene SOAP-Antwort sieht erwartungsgemäß aus.
Ich möchte die generierten Apex-Klassen ändern, um dieses Problem zu umgehen, da serverseitige Änderungen am Webdienst keine Option sind.
Die SOAP-Antwort sieht folgendermaßen aus:
<ns:getAccountsResponse>
<ns:return xsi:type="ax1:AccountReturn">
<ax2:successful>true</ax2:successful>
<ax2:transactionId>1000</ax2:transactionId>
<ax1:Accounts xsi:type="ax1:Account">
Und so sieht die WSDL für den Zielnamespace ax1 aus:
<xs:complexType name="AccountReturn">
<xs:complexContent>
<xs:extension base="ax100:BaseReturnObject">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Accounts" nillable="true" type="ax1:Account"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Und für den Zielnamespace ax2:
<xs:complexType name="BaseReturnObject">
<xs:sequence>
<xs:element minOccurs="0" name="successful" type="xs:boolean"/>
<xs:element minOccurs="0" name="transactionId" nillable="true" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
Die generierte Apex-Klasse, der zugeordnet istAccountReturn enthält nur die Felder für Accounts in ax1, nicht jedoch die BaseReturnObject-Felder in ax2, da die wsdl2apex-Generierung die Verwendung von nicht berücksichtigt xs:extension
oder das Importieren von Namespaces (basierend auf meinen Recherchen).
Gibt es eine Möglichkeit, die Apex-Klasse zu ändern, damit dies funktioniert? Ich habe versucht, die Felder von BaseReturnObject zu AccountReturn hinzuzufügen und zu ändern field_order_type_info
. Es scheint jedoch so apex_schema_type_info
kann nur auf einen Namespace verweisen. Dies kann der Grund dafür sein, dass das Parsen der Callout-Antwort immer noch fehlschlägt.
Antworten:
4 für die Antwort № 1Ich habe ein Tool zur Automatisierung der Erstellung von Apex - Klassen entwickelt. Es unterstützt unter anderem xs: extension und xs: import.
Im Fall einer ex: -Erweiterung zieht das Tool die erforderlichen Felder aus der Basisklasse in die Unterklasse und konfiguriert die _type_info
Mitglieder.
Sie können es kostenlos bekommen - FuseIT SFDC Explorer. Derzeit läuft in nur direkt in Windows. Ich hatte Berichte von Leuten, die Wine erfolgreich betrieben haben. (Offenlegung: Ich arbeite für das Unternehmen, das dieses Tool veröffentlicht).
Übrigens die salesforce.stackexchange.com Auf dieser Website können Sie Salesforce-spezifische Fragen stellen.