プログラマ38の日記

主にプログラムメモです。

Java: XML中の制御コードについて

XMLでは、制御コードは改行やタブなどの決められたもの以外は許可されていません。(こちらの説明が詳しいです)

なので、XMLで値をセットする際には許可されていない文字コードは除去する必要があります。(除去する方法はこの記事を参考にさせて頂きました)

 

そして、XMLを扱ってデータのやり取りを行うWebServiceでもこのXMLの許可されていない制御コードの対応が必要です。

 

以前JavaWebServiceクライアントについて記載したことがありますが、それぞれについて許可されていない制御コードは次の通りの動きです。

Java ライブラリ XML中の許可されていない制御コード 備考
Axis1.4 エラー リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。
Axis2 (xmlbeans) エラー リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。
wsimport エラー リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。
apache cxf エラー リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。
wsc(Salesforce専用) 除去する

エラーとならない。
wscの中でXML作成ロジックを書いている。

上記の通りとなり、Salesforce専用のwscは許可されていない制御コードを指定してもエラーとなりません。(wscを利用しているデータローダもエラーとなりません)

 

レガシーから移行したデータや、Web画面から入力されたデータには、垂直タブやシフトイン・シフトアウトなど入っている場合があります。

wsc以外のライブラリではデータの受け渡しで許可されていない制御コードは取り除く処理が必要です。

 

最後に

Salesforceとの連携プログラムを作成するのはwscが便利なのだとあらためて感じました。

 

といっても、wscも癖はあるので用途に応じて使い分けが必要だなと思います。

SalesforceからSalesforceに連携する場合は、wsc以外であれば、取得した値をそのままcreate、upsert、updateに使えばいいのですが、wscだけはint型はintへ、date型はdateへ、datetime型はCalendar、base64型はbinaryへ変換などの処理が必要になります。

 

連携プログラムを作る際の参考になれば幸いです。