/ / Ändern von durch Wsdl2Apex generierten Klassen zur Behandlung von xs: extension und importierten Namespaces - wsdl, salesforce, apex-code

Ändern von generierten Wsdl2Apex-Klassen für die Behandlung von xs: extension und importierten Namespaces - wsdl, salesforce, apex-code

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 № 1

Ich 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.