Ver Mensaje Individual
  #11  
Antiguo 09-05-2019
APO APO is offline
Miembro
 
Registrado: feb 2008
Posts: 121
Reputación: 17
APO Va por buen camino
Hola de nuevo,

Me han respondido de la AEAT sobre la consulta que les hice respecto a que la respuesta del WebService venía vacía a null. Pongo textualmente lo que me han respondido:

Buenos días:
Hay gente que tiene problemas con que la salida pueda tienes dos tipos de salida. Para eso tenemos diferentes soluciones. Te paso las posibles modificaciones (sobre ejemplos de los esquemas del EMCS) que se pueden realizar sobre los ficheros wsdl's que sabemos que han encontrado y aplicado satisfactoriamente algunas empresas que tuvieron este problema.

La primera, que mejor ha funcionado y que aplicasteis ya en el EMCS, es desplegar los wsdl's cambiando, sobre el fichero wsdl, la definición del mensaje de salida dejándolo de la siguiente forma:

<wsdl:message name="Salida">
<wsdl : part name="Ie215V1Sal1" element="Sal201:Ie201" />
<wsdl : part name="Ie215V1Sal2" element="Sal204:Ie204" />
</wsdl:message>

Con esto, en lugar de hacer referencia al tipo complejo que nosotros tenemos declarado, se definen las salidas como elementos, declarando los 2 posibles elementos raíz que la invocación al Servicio Web puede retornar, con lo que la definición del tipo complejo Ie215V1SalType puede eliminarse del wsdl. Se debe tener en cuenta también que el Servicio Web puede, además, devolver mensajes del tipo SOAP FAULT.

La segunda consiste en el uso de una definición del elemento del tipo 'sequence' cuyos elementos presenten ocurrencias mínimas 0; Dado que el control de respuesta recae en nuestro lado, siempre os aseguramos que solo uno de los dos elementos de la secuencia va a ser devuelto, salvo el caso del SOAP FAULT:
<xs:complexType name="Ie215V1SalType">
<xs:sequence>
<xs:element ref="Sal201:Ie201" minOccurs="0"></xs:element>
<xs:element ref="Sal204:Ie204" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>


Por último, definir un elemento del tipo 'all' con el atributo indicador de las ocurrencias mínimas igual a 0 que da a entender que los elementos hijos (CD815A/CD704A) pueden ser devueltos en cualesquiera orden, pudiendo aparecer los mismos ninguna o una vez; Como antes, dicho control recae en nuestro lado y SIEMPRE os será devuelto uno de los dos, nunca ambos, y nunca ninguno, salvo en el caso particular del SOAP FAULT.
<xs:complexType name="Ie215V1SalType">
<xs:all minOccurs="0">
<xs:element ref="Sal201:Ie201"></xs:element>
<xs:element ref="Sal204:Ie204"></xs:element>
</xs:all>
</xs:complexType>

Atentamente,
AEAT


¿Qué entendéis de todo esto?
Yo no sé si lo he entendido muy bien, pero da a entender que se debe modificar el WSDL? O quizá modificar la unidad que genera el WSDL al importar?

He probado de modificar el WSDL ( https://www3.agenciatributaria.gob.e...s/Ie215V1.wsdl ) así:

Sustituir esta parte:
Código:
<wsdl:message name="Salida">
<wsdl:part type="Ie215V1SalType" name="Ie215V1Sal"/>
</wsdl:message>
Por esta?
Código:
<wsdl:message name="Salida"> 
   <wsdl:part name="Ie215V1Sal1" element="Sal201:Ie201" /> 
   <wsdl:part name="Ie215V1Sal2" element="Sal204:Ie204" /> 
</wsdl:message>
Lo he probado de hacer, creando una copia del WSDL modificado en mi pc, pero al importarlo me genera una unidad sin apneas líneas de código. No estoy seguro de si es así cómo se debe hacer ?¿??¿?

Última edición por Casimiro Notevi fecha: 09-05-2019 a las 18:06:41.
Responder Con Cita