左に Java を貼り付けて "Convert" を押してください — XML に変換しますJava コードを貼り付け

このツールでできること

SOAP クライアント、Spring の設定、レガシーな銀行システム連携、JUnit のフィクスチャなどで、Java クラスに合う XML ペイロードを手書きしたことがある人なら、その面倒くささはよく分かるはずです。ここに Java を貼り付けるだけで、整形済みの XML が一発で返ってきます。単一の POJO、Lombok アノテーション付き DTO が並んだファイル、複数クラスを含む深くネストされたモデル — どれも結果は同じで、すべてのフィールドを保ったまま完全な XML ドキュメントになります。

単純なテンプレート埋め込みではありません。このツールは Java が XML にどうシリアライズされるかを理解しています。BigDecimal は精度をそのまま保ち(指数表記にはなりません)、LocalDateLocalDateTime は 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 個以上入ったファイルを貼るのも同じです。

1

Java を貼り付ける(またはサンプルを試す)

左のエディタにそのまま Java を貼り付けてください。素の POJOLombok の @Data クラスJAXB アノテーション付き DTO複数クラスを含むファイル — どれでも動きます。まず現実的な例を見たければ Load Sample を押してください。

import を削ったり、アノテーションを外したり、ファイルを掃除したりする必要はありません。IDE に置いてあるそのままの状態で貼ってください — コメントや package 宣言も全部そのままで大丈夫です。

2

Convert を押す

緑の Convert ボタンを押します。ツールは Java を読み、すべてのフィールドとクラスを保持し、アノテーションを尊重したうえで一発で XML を組み立てます。処理中は短いローディング表示が出ます。

3

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 は指数表記にならず、精度もそのままです。LocalDateLocalDateTimeZonedDateTime は 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 ピース。一緒に使うと便利なツールをまとめました。