2010-12-10 5 views
3

Ich versuche, eine WSDL in Salesforce zu importieren, wobei eines der XML-Elemente sowohl ein Element als auch einen Zeichenfolgenwert enthält, z.Salesforce-WSDL-Import von simpleContent mit Erweiterung

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

Wenn ich importiere dies die WSDL zu Apex Tool verwendet, ist der String-Wert in der generierten Klasse nicht verfügbar - nur das Attribut. Hier

ist der WSDL-Schnipsel:

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

Die generierte Klasse ist:

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[]{}; 
} 

Gibt es eine Weise, die ich manuell diese Klasse ändern kann einen Wert ohne Innenelement zu schaffen?

Antwort

2

Wie Sie festgestellt haben, unterstützt WSDL2Apex xs: extension nicht korrekt (es ist nicht in der Liste der unterstützten WSDL-Funktionen auf Seite 201 von http://www.salesforce.com/us/developer/docs/apexcode/salesforce_apex_language_reference.pdf).

ändern Sie Ihre generierten Klasse zu etwa so aussehen:

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[]{}; 
} 

Möglicherweise müssen auch die Methode für Ihren SOAP-Betrieb erzeugt ändern für diesen zusätzlichen Parameter zu ermöglichen - es hängt davon ab, was wie Ihre WSDL aussieht.

0

Der zugrunde liegende WebServiceCallout.invoke unterstützt keine Erweiterungen von einfachen Typen, die auch Attribute haben. Du kannst das eine oder das andere haben, aber nicht beides.

Ich habe das kostenlose Tool FuseIT SFDC Explorer gemacht, das eine alternative Version von Wsdl2Apex enthält. Dies umfasst eine Option zum Generieren der unformatierten HttpRequest- und der entsprechenden SOAP-XML-Nachricht in Apex. Hiermit können Sie die gewünschte Web-Methode aufrufen.