AEAT - libreria mxml - errores

Post Reply
Verhoven
Posts: 435
Joined: Sun Oct 09, 2005 7:23 pm

AEAT - libreria mxml - errores

Post by Verhoven »

Para ahorrarle a alguno posibles pérdidas de tiempo o por si a alguien se le ocurre una solución porque yo tenga algún error publico el problema con la que me he encontrado.

Al utilizar la librería mxml de harbour para generar ficheros xml con la finalidad de poder intercambiar mensajes xml con la AEAT (Agencia Tributaria española) mediante el Web Service he tenido que dedicar bastante tiempo debido a que la AEAT da como erroneos los xml generados con esta librería de Harbour porque introduce _ CRLF que a la AEAT no le gustan.

El código utilizado es:

Code: Select all

function xml_test_gen()
   local cFichSalida:="TEST_XML.xml"  
   local xml, root, header, body, Declarante
   local oXml  // Para comprobar al final que el xml generado se puede parsear.
 
   xml  := mxmlNewXML()  // Sin argumentos asume que es la "1.0"

   root := mxmlNewElement( xml, "soapenv:Envelope" )
        // Atributos de "soapenv:Envelope"
        mxmlElementSetAttr( root, "xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/" )
        mxmlElementSetAttr( root, "xmlns:ie2", "https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/IeXXXV1Ent.xsd" )
        mxmlElementSetAttr( root, "xmlns:cab", "https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/cab.xsd" )
        
   header := mxmlNewElement(root, "soapenv:Header")
   
   body   := mxmlNewElement(root, "soapenv:Body")

     //Declarante
     Declarante := mxmlNewElement(body, "ie2:IeXXX")
           mxmlElementSetAttr( Declarante, "Id"              , dtos(date())+strzero(12345,9) )
           mxmlElementSetAttr( Declarante, "NifDeclarante"   , "99999999R" )
           mxmlElementSetAttr( Declarante, "NombreDeclarante", "JUAN MANOLO MANOLO" )

   mxmlSaveFile( xml, cFichSalida, MXML_OPAQUE_CALLBACK )
   
   /*MXML_OPAQUE_CALLBACK constant which specifies that all data nodes in the
     document contain opaque string values with whitespace preserved. */
   
  // Parsea el fichero xml para comprobar que cumple con el formato xml.  
  oXML := mxmlLoadString ( NIL, hb_MemoRead( cFichSalida ), MXML_OPAQUE_CALLBACK )
  
  if empty( oXML )
     msgstop("No generó el fichero XML correctamente: "+cFichSalida,"ERROR FICHERO XML")
    else
     msginfo("Generó fichero: "+cFichSalida,"Proceso terminado")
  endif

   mxmlDelete( xml )
   mxmlDelete( root )
   mxmlDelete( header )
   mxmlDelete( body )
   mxmlDelete( Declarante )
   mxmlDelete( oXML )
return nil
Y el error devuelto por la AEAT es:

Code: Select all

<faultstring>Codigo[1304].El tipo de elemento "soapenv:Envelopexmlns" debe ir seguido por una de estas especificaciones de atributo: ">" o "/>". (1,61)</faultstring>
Aunque sin embargo, en los navegadores, el xml generado con la librería reseñada se ven bien y lo dan por correctos.
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: AEAT - libreria mxml - errores

Post by hmpaquito »

Gracias por la info, que seguro que alguien sin identificar sabe aprovechar. :roll:
No es mi caso. Yo lo monté todo con archivos de texto.
Te espera una buena. Buena suerte. ;-)
Post Reply