Java: XML中の制御コードについて
XMLでは、制御コードは改行やタブなどの決められたもの以外は許可されていません。(こちらの説明が詳しいです)
なので、XMLで値をセットする際には許可されていない文字コードは除去する必要があります。(除去する方法はこの記事を参考にさせて頂きました)
そして、XMLを扱ってデータのやり取りを行うWebServiceでもこのXMLの許可されていない制御コードの対応が必要です。
以前JavaのWebServiceクライアントについて記載したことがありますが、それぞれについて許可されていない制御コードは次の通りの動きです。
Java ライブラリ | XML中の許可されていない制御コード | 備考 |
Axis1.4 | エラー | リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。 |
Axis2 (xmlbeans) | エラー | リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。 |
wsimport | エラー | リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。 |
apache cxf | エラー | リクエスト用のXMLを作成する際に、許可されていない制御コードがあるとエラーとなる。 |
wsc(Salesforce専用) | 除去する |
エラーとならない。 |
上記の通りとなり、Salesforce専用のwscは許可されていない制御コードを指定してもエラーとなりません。(wscを利用しているデータローダもエラーとなりません)
レガシーから移行したデータや、Web画面から入力されたデータには、垂直タブやシフトイン・シフトアウトなど入っている場合があります。
wsc以外のライブラリではデータの受け渡しで許可されていない制御コードは取り除く処理が必要です。
最後に
Salesforceとの連携プログラムを作成するのはwscが便利なのだとあらためて感じました。
といっても、wscも癖はあるので用途に応じて使い分けが必要だなと思います。
SalesforceからSalesforceに連携する場合は、wsc以外であれば、取得した値をそのままcreate、upsert、updateに使えばいいのですが、wscだけはint型はintへ、date型はdateへ、datetime型はCalendar、base64型はbinaryへ変換などの処理が必要になります。
連携プログラムを作る際の参考になれば幸いです。