2017-06-07 20 views
2

実際にXMLの有効な文字である場合、[•(0xB7)、Ý(0xDD)、¨(0xA8)]のような特殊文字を含むxmlメッセージが拒否されるという問題に直面しています。私たちが見つけたのは、指定されていない場合、メッセージに割り当てられているデフォルトのエンコーディングの無効な文字です。特に、メッセージの先頭にエンコーディングタイプを追加すると、これを避けることができます。 UTF-8エンコーディングを使用しました。したがって、XML メッセージの先頭に ""を追加すると、文字は有効な文字になります。XML GENERATEコマンドでXMLエンコーディングを処理する方法は?

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

期待される出力が以下の符号化ビットが追加されなければならないということである。我々は、XMLは、以下に示すように、それが文字で構成され生成された参照場合

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

しかし:以下 は、COBOLコードでありますヘッダ。

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

これはXMLは、コードの別のpeiceに再び解析される生成されたときに問題が、それはXML-EXCEPTIONをencoutersされ、例外メッセージを完全にバックアウト。

このXMLを有効にするために追加する必要があるコードやコンパイルオプションがありますか?

+0

「xmlが表示されたら...」:見た目はどのソフトウェアを使用して見るのか、どのようにソフトウェアを構成するかによって異なります。これは、UTF-8を表示する方法を理解していない何かによってUTF-8が表示されているように思えます。 –

+0

@MichaelKayこれは私に起こったので、株式ISPFビューアーを使用してメインフレームでそれを見ていることをほぼ保証することができます – SaggingRufus

+0

あまりにも他の多くの環境で私に起こっています... –

答えて

2

これは完全に正常です。

XMLをUTF-8としてエンコードしていますが、メインフレーム(EBCDIC)でXMLを表示しています。 ISPFビューアーが作成したXMLファイルを開くと、16進数値が解釈されて何かを表示しようとしました。これらの値はEBCDIC文字セットと一線を画していないので、ガベージのように見えます。ファイルをコンピュータにFTPで転送すると、XMLが実際に探している出力であることがわかります。

XMLを解析するときには、実際に何か類似したことを行い、生成時に使用されたエンコーディングを指定する必要があります。以下のコードはUTF-8 XMLを解析し、それがメインフレームのSYSOUT

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で読み取り可能なように、例外のポイントはEBCDICで発生するまでは例外で、それはXMLアップがすべて表示されます:つまり、あなたのXMLには不正な文字などの正当なエラーが存在する可能性があります。私が掲示したコードがうまくいくならば、XMLをFTPし、XMLバリデーターを通してオンラインで実行して、どこに障害があるかを調べる。

+0

あなたが掲示したコードは、有効なxmlをスプールで見ることができるように助けてくれました。しかし、xml全体が解析されると、最後に例外(XML-CODE = 788818、何らかの無効なxmlを示す)があります。 SOAP UIクライアントを介してテストしています。そのため、SOAPクライアントでスローされるxmlもISPFエディタのように読み込みできません。ここでの私の質問は、1208エンコードを使用してXMLを生成し、生成されたXMLを1208エンコードを使用して解析したことです。したがって、最終的なXMLをCICSコンテナに送信する前に、変換を行う必要があり、最終的にはSOAPに変換する必要があります。 –

+0

XML PARSEビットを削除しようとしましたが、XML Generateを1208エンコーディングで行うだけでした。しかし、依然としてSOAPクライアントで生成されたXMLは読み取ることができません(ISPFビューと同じ)。この読み込み可能/作業をするために追加する必要のあるコードがあるかどうかは不明です。 –

+0

これで、SOAPクライアントもEBCDICで作業していることを理解しました。残念なことに、私はSOAPについてはあまりよく分かりませんが、UTF-8エンコーディングはあなたを混乱させています。 SOAPに関する知識が豊富な人は、あなたを助けなければならないでしょう。 – SaggingRufus

関連する問題