2010-12-10 37 views
3

Je tente d'importer un WSDL dans Salesforce où l'un des éléments XML contient à la fois un élément et une valeur de chaîne, par exemple.Import WSDL Salesforce de simpleContent avec extension

<foo bar="bob">baz</foo> 

Quand j'importer cela en utilisant l'outil WSDL à Apex, la valeur de chaîne n'est pas disponible dans la classe générée - que l'attribut.

Voici l'extrait WSDL:

<xs:complexType name="password"> 
    <xs:simpleContent> 
    <xs:extension base="xs:string"> 
     <xs:attribute name="Type" type="xs:string"/> 
    </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

La classe générée est:

public class password { 
    public String Type_x; 
    private String[] Type_x_att_info = new String[]{'Type'}; 
    private String[] apex_schema_type_info = new String[]{'http://schema.test.org/1_0','false','false'}; 
    private String[] field_order_type_info = new String[]{}; 
} 

Est-il possible que je peux modifier manuellement cette classe pour fournir une valeur sans un élément intérieur?

Répondre

2

Comme vous l'avez remarqué, WSDL2Apex ne prend pas en charge xs: extension correctement (il ne figure pas dans la liste des fonctionnalités WSDL prises en charge à la page 201 de http://www.salesforce.com/us/developer/docs/apexcode/salesforce_apex_language_reference.pdf).

Changez votre classe générée pour ressembler à quelque chose comme:

public class password { 
    public String input; 
    public String Type_x; 
    private String[] input_type_info = new String[]{'input','http://www.w3.org/2001/XMLSchema','string','1','1','false'}; // change 'input' to be the desired name of your element 
    private String[] Type_x_att_info = new String[]{'Type'}; 
    private String[] apex_schema_type_info = new String[]{'http://schema.test.org/1_0','false','false'}; 
    private String[] field_order_type_info = new String[]{}; 
} 

Vous pouvez également changer la méthode générée pour votre opération SOAP pour permettre ce paramètre supplémentaire - cela dépend de ce que votre WSDL ressemble.

0

Le WebServiceCallout.invoke sous-jacent ne prend pas en charge les extensions de types simples qui ont également des attributs. Vous pouvez avoir l'un ou l'autre, mais pas les deux.

J'ai créé l'outil gratuit FuseIT SFDC Explorer, qui inclut une version alternative de Wsdl2Apex. Cela inclut une option pour générer le message HttpRequest brut et le message XML SOAP correspondant dans Apex. Avec cela, vous pouvez appeler la méthode Web requise.