Salesforce WSDL импорт simpleContent с расширением - PullRequest
4 голосов
/ 11 декабря 2010

Я пытаюсь импортировать WSDL в Salesforce, где один из элементов XML содержит как элемент, так и строковое значение, например

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

Когда я импортирую это с помощью инструмента WSDL to Apex, строковое значение недоступно в сгенерированном классе - только атрибут.

Вот фрагмент 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>

Сгенерированный класс:

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

Есть ли способ, которым я могу вручную изменить этот класс, чтобы обеспечить значение без внутреннего элемента?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

Как вы заметили, WSDL2Apex правильно не поддерживает расширение xs: (его нет в списке поддерживаемых функций WSDL на стр. 201 из http://www.salesforce.com/us/developer/docs/apexcode/salesforce_apex_language_reference.pdf).

Измените сгенерированный класс, чтобы он выглядел примерно так:

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

Возможно, вам также придется изменить метод, сгенерированный для вашей операции SOAP, чтобы учесть этот дополнительный параметр - это зависит от того, как выглядит ваш WSDL.

0 голосов
/ 31 июля 2015

Базовый WebServiceCallout.invoke не поддерживает расширения простых типов, которые также имеют атрибуты.Вы можете иметь одно или другое, но не оба.

Я сделал бесплатный FuseIT SFDC Explorer инструмент, который включает альтернативную версию Wsdl2Apex.Это включает в себя возможность генерировать необработанный HttpRequest и соответствующее сообщение SOAP XML в Apex.При этом вы можете вызвать необходимый веб-метод.

...