$dom = new DomDocument('1.0','UTF-8');

$domに色々追加

print($dom->saveXML());

で送り出したXMLをJAXBで受信するとたまに、

org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 20544; 属性"{1}"の値に無効なXML文字(Unicode: 0x{2})が見つかりました。要素は"3"です。

ブラウザで受信すると

XML パースエラー: 整形式になっていません。

と言われる。多分日本語コードに何か混じってるのだろうけど、DOMなのにー!DOMとして受けたらちゃんと吐けー!不味いコードは入れる時に検出ー!
つかどうしたものか。文字コードUTF-8にしてるのが不味いっぽいからShift-JISのままなるべくスルーでやらせるか。いやしかし理屈的には今あるPHP環境は内部はUTF-8だからこれで良い筈。
⇒おお、閃いた。Webサービスだからって何も動的に生成する必要は無いデータだから、Javaでのバッチ処理の中でついでに作ろう。謎のPHPよりは扱い慣れてるし、データ変換の回数が減るというかソースから使えるから文字化けリスクが減る筈。