Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2019
APO APO is offline
Miembro
 
Registrado: feb 2008
Posts: 121
Poder: 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
  #2  
Antiguo 09-05-2019
ja_73 ja_73 is offline
Miembro
 
Registrado: abr 2017
Posts: 20
Poder: 0
ja_73 Va por buen camino
hola apo
he probado la primera parte y me funcionó.
ya me dirás a que correo enviaste la pregunta, yo envié uno aemcs(arroba)correo.aeat.es pero no me contestaron.
podrían publicar esto en las faq de la aeat, nos libraría de muchos dolores de cabeza...
te cuento lo que hice, yo lo hice en .NET, pero espero que te pueda ayudar.
me descarge el wsdl de la página de hacienda, y los todos los xsd necesarios, los guardas todos en una carpeta
modificas con el bloc de notas el archivo wsdl, y en la parte donde define el Ie215V1SalType pones el que pusiste tu.
luego cuando añades la referencia al servicio en .NET, normalmente agregas una url, ahora tines que hacer referencia a un archivo del disco duro.
se añade la referencia al servicio, y a partir de aquí ya es como siempre.
lo que ví que cambió, es que antes la llamada al servicio era así:
Código:
Ie215V1SalType respuesta = cliente.Ie215V1(ie215Tipo);
y ahora queda así
Código:
cliente.Ie215V1(ie215Tipo, out Ie215V1Service2.IE204Tipo iE204);
la respuesta la recibe la variable IE204.

sigo recibiendo el error 07009-Mensaje YA consumido con anterioridad y rechazado.
pero eso ya es otra historia
ahora por lo menos no recibo null
muchas gracias APO
y al señor de AEAT también

si alguien se anima a probar el resto de opciones, que publique a ver que tal les fué.
Responder Con Cita
  #3  
Antiguo 10-05-2019
APO APO is offline
Miembro
 
Registrado: feb 2008
Posts: 121
Poder: 17
APO Va por buen camino
Cita:
Empezado por ja_73 Ver Mensaje
hola apo
he probado la primera parte y me funcionó.
ya me dirás a que correo enviaste la pregunta, yo envié uno aemcs(arroba)correo.aeat.es pero no me contestaron.
podrían publicar esto en las faq de la aeat, nos libraría de muchos dolores de cabeza...
te cuento lo que hice, yo lo hice en .NET, pero espero que te pueda ayudar.
me descarge el wsdl de la página de hacienda, y los todos los xsd necesarios, los guardas todos en una carpeta
modificas con el bloc de notas el archivo wsdl, y en la parte donde define el Ie215V1SalType pones el que pusiste tu.
luego cuando añades la referencia al servicio en .NET, normalmente agregas una url, ahora tines que hacer referencia a un archivo del disco duro.
se añade la referencia al servicio, y a partir de aquí ya es como siempre.
lo que ví que cambió, es que antes la llamada al servicio era así:
Código:
Ie215V1SalType respuesta = cliente.Ie215V1(ie215Tipo);
y ahora queda así
Código:
cliente.Ie215V1(ie215Tipo, out Ie215V1Service2.IE204Tipo iE204);
la respuesta la recibe la variable IE204.

sigo recibiendo el error 07009-Mensaje YA consumido con anterioridad y rechazado.
pero eso ya es otra historia
ahora por lo menos no recibo null
muchas gracias APO
y al señor de AEAT también

si alguien se anima a probar el resto de opciones, que publique a ver que tal les fué.
Hola ja_73,

Me alegro que ya te funcione! Te pongo el email donde hice la consulta a la AEAT por si necesitaras alguna otra información: atenusu(arroba)correo.aeat.es

Yo, sin embargo, sigo teniendo problemas. He modificado el WSDL y todos los xsd relacionados, pero la respuesta me sigue viniendo a nil.
¿Podrías aquí poner el WSDL ya modificado? Y el código cuando consumes el WebService? No sé, algo me debo estar dejando.

Por otra parte, a todo esto le veo un inconveniente. Y es que, si modifican el Webservice, también tendremos que hacer de nuevo estas modificaciones no?

Muchas gracias!
Responder Con Cita
  #4  
Antiguo 10-05-2019
ja_73 ja_73 is offline
Miembro
 
Registrado: abr 2017
Posts: 20
Poder: 0
ja_73 Va por buen camino
Cita:
Empezado por APO Ver Mensaje
Hola ja_73,

Me alegro que ya te funcione! Te pongo el email donde hice la consulta a la AEAT por si necesitaras alguna otra información: atenusu(arroba)correo.aeat.es

Yo, sin embargo, sigo teniendo problemas. He modificado el WSDL y todos los xsd relacionados, pero la respuesta me sigue viniendo a nil.
¿Podrías aquí poner el WSDL ya modificado? Y el código cuando consumes el WebService? No sé, algo me debo estar dejando.

Por otra parte, a todo esto le veo un inconveniente. Y es que, si modifican el Webservice, también tendremos que hacer de nuevo estas modificaciones no?

Muchas gracias!
hola apo,
yo solo modifiqué el wsdl, la primera opción
sustituir
esto:
Código:
	<wsdl:message name="Salida">
		<wsdl:part name="Ie215V1Sal" type="Ie215V1SalType"/>
	</wsdl:message>
por esto:
Código:
<wsdl:message name="Salida"> 
    <wsdl : part name="Ie215V1Sal1" element="Sal201:Ie201" /> 
    <wsdl : part name="Ie215V1Sal2" element="Sal204:Ie204" /> 
</wsdl:message>
importas el wsdl y el resto del código debería funcionarte igual, (por lo menos en .NET, en delphi no se como puede ser)
un truco, copia el wsdl y los archivos modificados en una carpeta nueva, antes de volver a importar, en .net por lo menos a mi, siempre me importaba el mismo y me daba error, hasta que lo copié en una carpeta nueva y me lo importó bien.
Responder Con Cita
  #5  
Antiguo 14-05-2019
mtxtania mtxtania is offline
Registrado
 
Registrado: may 2019
Posts: 8
Poder: 0
mtxtania Va por buen camino
Buenas tardes, yo de momento quiero probar sin modificar el WDSL aunque me salta el siguiente error y no puedo analizar las respuestas:


Codigo[1207].Se esperaba Atributo 'Id' event: com.ibm.xml.xlxp.api.stax.events.StartElementImpl@84705eb1


Estoy con los albaranes, Ie215V1.wsdl



Os suena a alguno?
Responder Con Cita
  #6  
Antiguo 15-05-2019
APO APO is offline
Miembro
 
Registrado: feb 2008
Posts: 121
Poder: 17
APO Va por buen camino
Cita:
Empezado por mtxtania Ver Mensaje
Buenas tardes, yo de momento quiero probar sin modificar el WDSL aunque me salta el siguiente error y no puedo analizar las respuestas:

Codigo[1207].Se esperaba Atributo 'Id' event: com.ibm.xml.xlxp.api.stax.events.StartElementImpl@84705eb1

Estoy con los albaranes, Ie215V1.wsdl

Os suena a alguno?
Hola mtxtania,
Eso también me pasaba a mí. Es porque al importar el WSDL al final de todo añade unos namespace a los atributos Id, NifDeclarante, NombreDeclarante y Test. Se ve que al generar el XML de salida no le gusta con esos namespace.

Yo lo solucioné comentando esas líneas:

Código Delphi [-]
//  RemClassRegistry.RegisterExternalPropName(TypeInfo(Ie201Tipo), 'Test', '[Namespace="https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/listas.xsd"]');
//  RemClassRegistry.RegisterExternalPropName(TypeInfo(Ie215Tipo), 'Id', '[Namespace="https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/tipos.xsd"]');
//  RemClassRegistry.RegisterExternalPropName(TypeInfo(Ie215Tipo), 'NifDeclarante', '[Namespace="https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/tipos.xsd"]');
//  RemClassRegistry.RegisterExternalPropName(TypeInfo(Ie215Tipo), 'NombreDeclarante', '[Namespace="https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/tipos.xsd"]');
//  RemClassRegistry.RegisterExternalPropName(TypeInfo(Ie215Tipo), 'Test', '[Namespace="https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/listas.xsd"]');

Pruébalo y cuéntanos a ver qué tal
Responder Con Cita
  #7  
Antiguo 15-05-2019
mtxtania mtxtania is offline
Registrado
 
Registrado: may 2019
Posts: 8
Poder: 0
mtxtania Va por buen camino
Perfecto gracias!!

Ahora me encuentro que las respuestas me vienen a nil como comentabais mas arriba. Tengo que modificar el WSDL? Os ha funcionado a vosotros?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consumir Webservice darkerbyte Delphi para la web 5 17-11-2012 20:59:50
Consumir un webservice echo en delphi con php anahuel Delphi para la web 3 27-10-2012 07:20:42
Consumir WebService nasedo Varios 1 11-08-2011 14:32:57
Consumir Webservice MARLON1 Internet 0 06-07-2011 00:07:12
Problema al consumir un Webservice netcigos Varios 0 08-03-2004 15:09:30


La franja horaria es GMT +2. Ahora son las 18:24:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi