开发者

Salesforce WSDL import of simpleContent w/extension

开发者 https://www.devze.com 2023-01-30 04:58 出处:网络
I am attempting to import a WSDL into Salesforce where one of the XML elements contains both an element and a string value e.g.

I am attempting to import a WSDL into Salesforce where one of the XML elements contains both an element and a string value e.g.

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

When I import this using the WSDL to Apex tool, the string value is not available in the generated class--just the attribute.

Here is the WSDL snippet:

 <xs:complexType name="password">
   <xs:simpleContent>
     <xs:extension base="xs:string">
       <xs:attribute name="Type" type="xs:s开发者_JS百科tring"/>
     </xs:extension>
   </xs:simpleContent>
 </xs:complexType>

The generated class is:

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

Is there a way I can manually modify this class to provide a value without an inner element?


As you've noticed, WSDL2Apex doesn't support xs:extension correctly (it's not in the list of supported WSDL features on page 201 of http://www.salesforce.com/us/developer/docs/apexcode/salesforce_apex_language_reference.pdf).

Change your generated class to look something like:

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

You may also have to change the method generated for your SOAP operation to allow for this extra parameter - it depends on what your WSDL looks like.


The underlying WebServiceCallout.invoke doesn't support extensions of simple types that also have attributes. You can have one or the other, but not both.

I've made the free FuseIT SFDC Explorer tool, which includes an alternative version of Wsdl2Apex. This includes an option to generate the raw HttpRequest and corresponding SOAP XML message in Apex. With this you can call the required web method.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号