Java から XML への変換ツール
Java のクラスや POJO を貼り付けると、きれいな XML が返ってきます。
このツールでできること
SOAP クライアント、Spring の設定、レガシーな銀行システム連携、JUnit のフィクスチャなどで、Java クラスに合う XML ペイロードを手書きしたことがある人なら、その面倒くささはよく分かるはずです。ここに Java を貼り付けるだけで、整形済みの XML が一発で返ってきます。単一の POJO、Lombok アノテーション付き DTO が並んだファイル、複数クラスを含む深くネストされたモデル — どれも結果は同じで、すべてのフィールドを保ったまま完全な XML ドキュメントになります。
単純なテンプレート埋め込みではありません。このツールは Java が XML にどうシリアライズされるかを理解しています。BigDecimal は精度をそのまま保ち(指数表記にはなりません)、LocalDate や LocalDateTime は ISO-8601 で出力され、UUID は標準の 8-4-4-4-12 の 16 進表記、Instant は末尾に Z が付いたタイムスタンプ、null が入ったボックス型プリミティブは空要素になります。List<T> はコンテナ要素になり — デフォルトでは外側でラップされ、要素ごとに 1 つの子を持つ形で — Jakarta XML Binding (JAXB) が出力するのと同じ形になります。
アノテーションは Eclipse JAXB RI が扱うのと完全に同じように尊重されます。@XmlRootElement(name="...") はルートをリネーム、@XmlElement(name="...") は子要素をリネーム、@XmlAttribute はフィールドを親要素の属性として出力、@XmlTransient は完全に除外、@XmlElementWrapper はコレクションの外側にラップ要素を追加します。Lombok の @Data も効きます — 生成される getter と setter は Bean プロパティとして扱われます。Jackson XML モジュール派なら、@JacksonXmlProperty や @JacksonXmlElementWrapper も同じく尊重されます。ネストされたクラス、継承されたフィールド、複数のトップレベルクラス、すべてきれいに出力されます。
使い方
3 ステップ。POJO を 1 つ貼るのも、クラスが 10 個以上入ったファイルを貼るのも同じです。
Java を貼り付ける(またはサンプルを試す)
左のエディタにそのまま Java を貼り付けてください。素の POJO、Lombok の @Data クラス、JAXB アノテーション付き DTO、複数クラスを含むファイル — どれでも動きます。まず現実的な例を見たければ Load Sample を押してください。
import を削ったり、アノテーションを外したり、ファイルを掃除したりする必要はありません。IDE に置いてあるそのままの状態で貼ってください — コメントや package 宣言も全部そのままで大丈夫です。
Convert を押す
緑の Convert ボタンを押します。ツールは Java を読み、すべてのフィールドとクラスを保持し、アノテーションを尊重したうえで一発で XML を組み立てます。処理中は短いローディング表示が出ます。
XML をコピーする
右側のパネルに、準拠した XML パーサーが受け付ける、インデント済みの整形された XML が表示されます。SOAP エンベロープ、Spring Boot の設定、統合テスト、XSD ベースのスキーマ例などにコピーしてください。
こんな場面で役に立ちます
SOAP フィクスチャを用意する
JAX-WS や Apache CXF のリクエスト DTO があって、SoapUI や Postman 用の XML ボディが欲しい場合。クラスを貼るだけでエンベロープにそのまま入れられる XML が取れるので、あとは本来の作業に戻れます。
Spring Boot の XML 設定
30 フィールドある Spring の @ConfigurationProperties クラスが、そのまま編集できる XML テンプレートに変わります — applicationContext.xml の定型を手書きする必要はもうありません。
ドキュメントとコードの整合性を保つ
実際のエンティティクラスから直接 README、社内 Wiki、XSD ベースのスキーマドキュメント用の XML 例を生成できるので、例がコードとずれることがありません。
レガシー統合テストのシードデータ
JUnit のオブジェクトマザーを、モックサーバー、IBM MQ のフィクスチャ、今も XML でやり取りしているレガシーなエンタープライズシステム向けの XML シードファイルに変換できます。
よくある質問
複数クラスをまとめて貼り付けられますか?
はい — ファイル丸ごと貼ってください。各トップレベルクラスは、ネストされた型が展開され、親クラスから継承したフィールドも含めた形で出力されます。ルートから参照されていないクラスは独立した XML フラグメントとして出力されるので、黙って消えることはありません。
@XmlRootElement、@XmlElement、@XmlAttribute、@XmlTransient のような JAXB アノテーションは効きますか?
はい。@XmlRootElement(name="x") はルートをリネーム、@XmlElement(name="x") は子要素をリネーム、@XmlAttribute(name="x") はフィールドを親の属性として出力、@XmlTransient は除外、@XmlElementWrapper はコレクションの外側に要素を追加します。JAXB チュートリアルに書かれているのと同じ挙動です。
Lombok や Jackson XML はどうなりますか?
Lombok の @Data、@Getter、@Setter は、アクセサが手書きされている場合と同じように扱われます。Jackson XML のアノテーション — @JacksonXmlProperty、@JacksonXmlRootElement、@JacksonXmlElementWrapper、@JacksonXmlText — も尊重されるので、Jackson dataformats-text の XmlMapper 向けに作られたクラスも正しく出力されます。
BigDecimal、LocalDate、UUID、null フィールドはどう扱われますか?
BigDecimal は指数表記にならず、精度もそのままです。LocalDate、LocalDateTime、ZonedDateTime は ISO-8601 の文字列として出力されます。Instant は末尾に Z が付きます。UUID は標準の 8-4-4-4-12 の小文字 16 進表記です。Optional.empty() や null が入ったボックス型プリミティブは消されず空要素になるので、インスタンスごとに XML の形がブレません。
コードは保存されますか?
変換のためにバックエンドに送られるだけで、保存もしませんし、ペイロードをログに残すこともありません。ただし他のオンラインツールと同じで、本当に機密性の高いコードを貼り付ける前にはいったん見直してください。
Streams、CompletableFuture、transient フィールドみたいな変わったものがクラスに入っていたら?
transient が付いたフィールドや @XmlTransient / @JsonIgnore が付いたフィールドはスキップされます。XML に直接マッピングがない型(Streams、CompletableFuture、独自の関数型インターフェイスなど)は変換全体を失敗させるのではなく空要素として出力されます。Java そのものにコンパイルエラーがある場合は、明らかなものだけでも先に直してください — パーサーはかなり寛容ですが、完全な javac ではありません。
関連ツール
Java から XML はパズルの 1 ピース。一緒に使うと便利なツールをまとめました。