私はこれを頭の中で調べて、数日間さまざまなアプローチを試し、SO(XMLをJavaオブジェクトに変換するためのベストプラクティスは何ですか?)とGoogleを検索してXSLT上でJAXBを使用しましたが、できません適切な答えを見つけてください。何年にもわたって、さまざまなプロジェクトでCastor、JIBX、XSLTを使用してきたので、XMLバインディングについて少し知っています。
私の問題は、非常にフラットなXML構造を持っており、それをJavaクラスにアンマーシャリングして、リレーショナルデータベース(Oracleである必要があります)に直接永続化することです。小さな例...
<Output>
<Channel>
<channelId>1</channelId>
<genreId>1</genreId>
</Channel>
<Channel>
<channelId>2</channelId>
<genreId>2</genreId>
</Channel>
<Genre>
<genreId>1</genreId>
<name>Movies</name>
</Genre>
<Genre>
<genreId>2</genreId>
<name>Sport</name>
</Genre>
<ChannelName>
<channelId>1</channelId>
<name>The Movie Channel</name>
</ChannelName>
<ChannelName>
<channelId>2</channelId>
<name>The Sport Channel</name>
</ChannelName>
</Output>
上記のXMLに本当に必要なのは、OneToOne関係にある2つの単純な注釈付きクラスであり、JPAを使用して永続化できます。基本的に、次のようなデータベーステーブルを反映するクラスが必要です。
class Channel {
Long id;
String name;
Genre genre;
}
class Genre {
Long id;
String name;
}
XMLはマーシャリングされないだけであり、主観的な質問になる可能性があることを認識しているこの問題の最も簡単な解決策を本当に探しています。
私はXSLTのファンなので、XSLTを使用して元のXMLをより適切な構造に曲げ、コードとより厳密に一致させてから、非常に単純なJAXBアノテーションを使用してクラスにバインドするのが良い設計かどうかを本当に尋ねています。XMLAdapter
または、JAXBを使用して「変換」を行うことを選択する必要があります。これには、 sやアノテーションなどのより実際のJavaコードが含まれると思います。基本的に、JAXBはXSLTに対して何のメリットがありますか、それとも他に何が得られますか?