loopbackio / strong-soap

SOAP driver for Node.js (A complete rewrite of node-soap)
Other
391 stars 162 forks source link

xmlHandler.jsonToXml() doesn't parse json correctly #256

Closed haegemonia76 closed 4 years ago

haegemonia76 commented 4 years ago

Description/Steps to reproduce

I have an object(1) who contain an array of objects(2) and i wanted them to be inside of unique xml property when being generated, because it cause problem when sending information through the soap method because the payload isn't correct, you can see actual result and expected result a little bit lower.

run the test project

Link to reproduction sandbox

Edit jsonToXml-parsing-problem

Expected result

<demandeCreerArticles>
  <article>
    <sequence>1</sequence>
    <designation>PSG M NK VAPOR MTCH JSY SS HM</designation>
    <prefixeReference>31</prefixeReference>
    <suffixeReference>0</suffixeReference>
    <typeEmplacement>T01</typeEmplacement>
    <devise>EUR</devise>
    <designationDetaillee>PSG M NK VAPOR MTCH JSY SS HM</designationDetaillee>
    <designationFournisseur>{{designationFournisseur}}</designationFournisseur>
    <hauteur>1</hauteur>
    <rayon>MAI</rayon>
    <acheteur>NIK</acheteur>
    <taille>XXL</taille>
    <prixAchat>68.29</prixAchat>
    <ean13>192501923886</ean13>
    <gestionDeStock>1</gestionDeStock>
    <referenceOuverte>0</referenceOuverte>
    <prixModifiable>1</prixModifiable>
    <familleMarketing>PAR</familleMarketing>
    <fournisseurPrincipal>2074699</fournisseurPrincipal>
    <referenceFournisseur>AJ5265-411 2XL</referenceFournisseur>
    <livrabilite>LIV</livrabilite>
    <dateDebutValidite>{{dateDebutValidite}}</dateDebutValidite>
    <prixVente>
      <offre>MIS01</offre>
      <montant>139,9</montant>
    </prixVente>
    <nomenclature>
      <code>F</code>
      <niveau1>920</niveau1>
      <niveau2>A</niveau2>
      <niveau3>MER</niveau3>
    </nomenclature>
  </article>
  <article>
    <sequence>2</sequence>
    <designation>PSG M NK VAPOR MTCH JSY SS HM</designation>
    <prefixeReference>31</prefixeReference>
    <suffixeReference>0</suffixeReference>
    <typeEmplacement>T01</typeEmplacement>
    <devise>EUR</devise>
    <designationDetaillee>PSG M NK VAPOR MTCH JSY SS HM</designationDetaillee>
    <designationFournisseur>{{designationFournisseur}}</designationFournisseur>
    <hauteur>1</hauteur>
    <rayon>MAI</rayon>
    <acheteur>NIK</acheteur>
    <taille>L</taille>
    <prixAchat>68.29</prixAchat>
    <ean13>192501923862</ean13>
    <gestionDeStock>1</gestionDeStock>
    <referenceOuverte>0</referenceOuverte>
    <prixModifiable>1</prixModifiable>
    <familleMarketing>PAR</familleMarketing>
    <fournisseurPrincipal>2074699</fournisseurPrincipal>
    <referenceFournisseur>AJ5265-411 L</referenceFournisseur>
    <livrabilite>LIV</livrabilite>
    <dateDebutValidite>{{dateDebutValidite}}</dateDebutValidite>
    <prixVente>
      <offre>MIS01</offre>
      <montant>139,9</montant>
    </prixVente>
    <nomenclature>
      <code>F</code>
      <niveau1>920</niveau1>
      <niveau2>A</niveau2>
      <niveau3>MER</niveau3>
    </nomenclature>
  </article>
</demandeCreerArticles>

Actual result

<demandeCreerArticles>
  <article>
    <sequence>1</sequence>
    <designation>PSG M NK VAPOR MTCH JSY SS HM</designation>
    <prefixeReference>31</prefixeReference>
    <suffixeReference>0</suffixeReference>
    <typeEmplacement>T01</typeEmplacement>
    <devise>EUR</devise>
    <designationDetaillee>PSG M NK VAPOR MTCH JSY SS HM</designationDetaillee>
    <designationFournisseur>{{designationFournisseur}}</designationFournisseur>
    <hauteur>1</hauteur>
    <rayon>MAI</rayon>
    <acheteur>NIK</acheteur>
    <taille>XXL</taille>
    <prixAchat>68.29</prixAchat>
    <ean13>192501923886</ean13>
    <gestionDeStock>1</gestionDeStock>
    <referenceOuverte>0</referenceOuverte>
    <prixModifiable>1</prixModifiable>
    <familleMarketing>PAR</familleMarketing>
    <fournisseurPrincipal>2074699</fournisseurPrincipal>
    <referenceFournisseur>AJ5265-411 2XL</referenceFournisseur>
    <livrabilite>LIV</livrabilite>
    <dateDebutValidite>{{dateDebutValidite}}</dateDebutValidite>
    <prixVente>
      <offre>MIS01</offre>
      <montant>139,9</montant>
    </prixVente>
    <nomenclature>
      <code>F</code>
      <niveau1>920</niveau1>
      <niveau2>A</niveau2>
      <niveau3>MER</niveau3>
    </nomenclature>
  </article>
</demandeCreerArticles>
<demandeCreerArticles>
  <article>
    <sequence>2</sequence>
    <designation>PSG M NK VAPOR MTCH JSY SS HM</designation>
    <prefixeReference>31</prefixeReference>
    <suffixeReference>0</suffixeReference>
    <typeEmplacement>T01</typeEmplacement>
    <devise>EUR</devise>
    <designationDetaillee>PSG M NK VAPOR MTCH JSY SS HM</designationDetaillee>
    <designationFournisseur>{{designationFournisseur}}</designationFournisseur>
    <hauteur>1</hauteur>
    <rayon>MAI</rayon>
    <acheteur>NIK</acheteur>
    <taille>L</taille>
    <prixAchat>68.29</prixAchat>
    <ean13>192501923862</ean13>
    <gestionDeStock>1</gestionDeStock>
    <referenceOuverte>0</referenceOuverte>
    <prixModifiable>1</prixModifiable>
    <familleMarketing>PAR</familleMarketing>
    <fournisseurPrincipal>2074699</fournisseurPrincipal>
    <referenceFournisseur>AJ5265-411 L</referenceFournisseur>
    <livrabilite>LIV</livrabilite>
    <dateDebutValidite>{{dateDebutValidite}}</dateDebutValidite>
    <prixVente>
      <offre>MIS01</offre>
      <montant>139,9</montant>
    </prixVente>
    <nomenclature>
      <code>F</code>
      <niveau1>920</niveau1>
      <niveau2>A</niveau2>
      <niveau3>MER</niveau3>
    </nomenclature>
  </article>
</demandeCreerArticles>

Additional information

    node -e 'console.log(process.platform, process.arch, process.versions.node)'
    # linux x64 10.17.0
    npm ls --prod --depth 0 | grep loopback
    # empty
deepakrkris commented 4 years ago

@haegemonia76 there is a change needed in your json template for a correct sequence to be generated. demandeCreerArticles cannot be an array since the intend is to have a sequence of articles.

Updated template:

{
  "demandeCreerArticles": {
    "article": [
      {
        "sequence": "{{sequence}}",
        "designation": "{{designation}}",
        "prefixeReference": "{{prefixeReference}}",
        "suffixeReference": "{{suffixeReference}}",
        "typeEmplacement": "{{typeEmplacement}}",
        "devise": "{{devise}}",
        "designationDetaillee": "{{designationDetaillee}}",
        "designationFournisseur": "{{designationFournisseur}}",
        "hauteur": "{{hauteur}}",
        "rayon": "{{rayon}}",
        "acheteur": "{{acheteur}}",
        "taille": "{{taille}}",
        "prixAchat": "{{prixAchat}}",
        "ean13": "{{ean13}}",
        "gestionDeStock": "{{gestionDeStock}}",
        "referenceOuverte": "{{referenceOuverte}}",
        "prixModifiable": "{{prixModifiable}}",
        "familleMarketing": "{{familleMarketing}}",
        "fournisseurPrincipal": "{{fournisseurPrincipal}}",
        "referenceFournisseur": "{{referenceFournisseur}}",
        "livrabilite": "{{livrabilite}}",
        "dateDebutValidite": "{{dateDebutValidite}}",
        "prixVente": {
          "offre": "{{offre1}}",
          "montant": "{{montant1}}"
        },
        "nomenclature": {
          "code": "{{code}}",
          "niveau1": "{{niveau1}}",
          "niveau2": "{{niveau2}}",
          "niveau3": "{{niveau3}}"
        }
      }
    ]
  }
}
deepakrkris commented 4 years ago

The generated json should be something like

{
  demandeCreerArticles: {
    article: [
   {
      "sequence":"1",
      "designation":"PSG M NK VAPOR MTCH JSYSS HM",
      "prefixeReference":"31",
   },
   {
      "sequence":"2",
      "designation":"PSG M NK VAPOR MTCH JSY SS HM",
      "prefixeReference":"31",
   }
    ]
  }
}
deepakrkris commented 4 years ago

with an updated template I am able to run and get the expected xml output

haegemonia76 commented 4 years ago

@deepakrkris thanks, I see where I made a mistake thanks to you