2017-06-07 4 views
2

Nous sommes confrontés à un problème où les messages XML avec les caractères spéciaux comme [· (0xB7), Ý (0xDD), ¨ (0xA8)] sont rejetés, quand ils sont en réalité des caractères XML valides. Ce que nous avons trouvé, c'est que ce sont des caractères non valides pour le codage par défaut qui est assigné à un message, lorsqu'il n'est pas spécifié. Nous pouvons éviter cela, si nous ajoutons spécifiquement le type d'encodage en haut du message. Nous avons utilisé l'encodage UTF-8. Ainsi, en ajoutant "" au tout début du message XML , les caractères devraient devenir des caractères valides. est en dessous du code COBOL:Comment gérer le codage XML dans la commande XML GENERATE?

XML GENERATE RESPONSEDATA FROM ACCT 
    COUNT IN RESPONSEDATALL     
      WITH ENCODING 1208      
      WITH XML-DECLARATION      
END-XML 

Mais quand on voit le XML généré, il se compose de caractères comme indiqué ci-dessous:

..Ì_%.ÎÁÊËÑ?>.......Á>Ä?ÀÑ>Å..UTF-8.... 

Le résultat attendu est que le bit de codage ci-dessous doit être ajouté à la entête.

<?xml version=“1.0” encoding=“utf-8”?> 

Donc, la question est quand ce XML est analysé à nouveau généré dans un autre morceau de code, il Encouters un XML et désiste EXCEPTION tout à fait avec un message d'exception.

La question est de savoir s'il existe d'autres options de code ou de compilation qui doivent être ajoutées pour rendre ce fichier xml valide?

+0

"Quand on voit le xml ...": ce à quoi cela ressemble dépend du logiciel que vous utilisez pour le regarder, et comment vous configurez ce logiciel. Cela me semble très UTF-8 étant affiché par quelque chose qui ne comprend pas comment afficher UTF-8. –

+0

@MichaelKay Je peux presque garantir qu'il regarde sur le mainframe en utilisant la visionneuse ISPF stock, parce que cela m'est arrivé – SaggingRufus

+0

Eh bien, il m'est arrivé dans de nombreux autres environnements trop ... –

Répondre

2

Ceci est tout à fait normal.

Vous codez le code XML comme UTF-8, mais vous visualisez le code XML sur le mainframe (qui est EBCDIC). Lorsque votre visualiseur ISPF ouvre le fichier XML que vous avez créé, il interprète simplement les valeurs hexadécimales et essaie de vous montrer quelque chose. Parce que ces valeurs ne sont pas alignées avec le jeu de caractères EBCDIC, cela ressemble à de la foutaise. Si vous transférez le fichier par FTP sur votre ordinateur, vous verrez que le XML est en fait la sortie que vous recherchez. Lorsque vous analysez le code XML, vous devez en fait faire quelque chose de similaire et spécifier le codage qui a été utilisé pendant la génération. Le code ci-dessous analyser un XML UTF-8, et exception, il affiche l'ensemble du XML jusqu'au point de l'exception est survenue en EBCDIC il est lisible dans le SYSOUT central

XML PARSE WS-MY-XML 
    ENCODING 1208 
    PROCESSING PROCEDURE XXXX-PROCESS-XML 
    ON EXCEPTION 
     DISPLAY "EXCEPTION OCCURED: " 
     DISPLAY FUNCTION DISPLAY-OF (
     FUNCTION NATIONAL-OF (
      XML-TEXT 1208 
     ) 
     1140 
    ) 
END-XML 

EDIT: Cela étant dit, il pourrait toujours y avoir une erreur légitime dans votre XML, comme un caractère illégal. Si le code que j'ai posté fonctionne également, FTP le XML et l'exécuter via un validateur XML en ligne pour voir où est la faute.

+0

Le code que vous avez posté m'a aidé à voir xml valide dans spool, l'a validé en ligne aussi. Mais il existe toujours une exception (XML-CODE = 788818, indiquant une sorte de xml invalide) juste à la fin lorsque le xml entier est analysé. Je le teste via un client SOAP UI afin que le xml qui est jeté dans le client SOAP ne soit pas lisible, tout comme dans l'éditeur ISPF. Ma question ici est que nous avons généré le code XML en utilisant 1208 encoder, puis analysé le code XML généré en utilisant 1208 encoder. Nous devons donc effectuer une conversion avant d'envoyer le code XML final dans le conteneur CICS, et éventuellement dans SOAP. –

+0

Nous avons même essayé de supprimer le bit XML PARSE et de faire XML GENERATE avec le codage 1208.Mais le code XML généré dans le client SOAP n'est toujours pas lisible (identique à la vue ISPF). Donc pas sûr si il y a un autre morceau de code qui doit être ajouté pour rendre ce travail lisible. –

+0

Ok, maintenant je comprends, le client SOAP travaille aussi dans EBCDIC. Malheureusement, je ne connais pas grand-chose à SOAP, mais c'est l'encodage UTF-8 qui vous gâche. Quelqu'un ayant plus de connaissances sur SOAP devrait vous aider. – SaggingRufus