wsdl - webservices - servicios web salesforce
Modificación de clases generadas Wsdl2Apex para manejar xs: extensiones y espacios de nombres importados (1)
Estoy teniendo problemas con la generación de código wsdl2apex, principalmente debido al uso de xs:import namespace
y xs:extension
en mi WSDL.
En particular, estoy viendo el error System.CalloutException: Web service callout failed: Unable to parse callout response. Apex type not found for element . . .
System.CalloutException: Web service callout failed: Unable to parse callout response. Apex type not found for element . . .
. La respuesta SOAP sin procesar devuelta por el servicio web se ve como era de esperar.
Me gustaría modificar las clases Apex generadas para evitar este problema, ya que los cambios en el servidor del servicio web no son una opción.
La respuesta SOAP se ve así:
<ns:getAccountsResponse>
<ns:return xsi:type="ax1:AccountReturn">
<ax2:successful>true</ax2:successful>
<ax2:transactionId>1000</ax2:transactionId>
<ax1:Accounts xsi:type="ax1:Account">
Y el WSDL se ve así para el espacio de nombres del objetivo ax1:
<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>
Y para el espacio de nombres de objetivo 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>
La Clase Apex generada que se asigna a AccountReturn solo contiene los campos para Cuentas en ax1, pero no los campos BaseReturnObject en ax2, ya que la generación wsdl2apex no respeta el uso de xs:extension
o la importación de espacios de nombres (según mi investigación).
¿Hay alguna forma de modificar la Clase Apex para que esto funcione? Intenté agregar los campos desde BaseReturnObject a AccountReturn, y modificando field_order_type_info
. Sin embargo, parece que apex_schema_type_info
solo puede apuntar a un espacio de nombre, y esta puede ser la razón por la que el análisis de la respuesta del texto sigue fallando.
Creé una herramienta para automatizar la creación de las clases de Apex. Incluye soporte para xs: extension y xs: import (entre otras cosas).
En el caso de una extensión ex:, la herramienta extraerá los campos requeridos de la clase base en la subclase y configurará correctamente los miembros _type_info
.
Puedes obtenerlo gratis - FuseIT SFDC Explorer . Actualmente solo se ejecuta directamente en Windows. He recibido informes de personas que lo ejecutan con éxito utilizando Wine. (Divulgación: trabajo para la compañía que lanza esta herramienta).
Por cierto, el sitio de salesforce.stackexchange.com es un gran lugar para hacer preguntas específicas de Salesforce.