web-dev-qa-db-ja.com

JavaオブジェクトをオープンソースAPIでXMLに変換する最良の方法は何ですか

Javaオブジェクトをxmlに変換するのに最適なAPIまたは最も広く使用されているapiが何であるか疑問に思っていました。オブジェクト内でxmlを返しますか?または、オブジェクト値を引き出して手動でドキュメントを作成する必要がある場合は、はるかに面倒ですか?

私はxerces、sax、およびjaxbについて読んでいます。このオープンソースのルートに沿って続けていきたいと思います。

ありがとう!

38
Atma

[〜#〜] jaxb [〜#〜]は間違いなくtheソリューションです。

どうして?まあ、それはJDK 6内であるため、メンテナンスされていないことは決してありません。

Java注釈を使用して、クラス、メソッド、およびフィールドのXML関連プロパティを宣言します。

チュートリアル1

チュートリアル2

注:JAXBを使用すると、XMLデータ(以前はJavaオブジェクトインスタンスからマーシャリングされていた)を簡単にオブジェクトインスタンスに「アンマーシャリング」することもできます。

JAXBのもう1つの素晴らしい点は、JAX-RSなどのその他のJava関連テクノロジーによってサポートされていることです(Java RESTful API、利用可能です) Java EE 6)の一部として。 JAX-RSは、JAXBオブジェクトをオンザフライで処理および受信できます。オブジェクトをマーシャリング/アンマーシャリングする必要はありません。 Netbeans をチェックアウトすることをお勧めします。これには、JAX-RSのすぐに使えるサポートが含まれています。はじめに このチュートリアル をお読みください。

編集:

「ランダム」(または外部)Javaオブジェクトをマーシャル/アンマーシャルするために、JAXBはかなり単純な可能性を提供します。XmlAdapterおよび既存のJava JAXB互換のクラス。このようなXmlAdapterの使用は、@ XmlJavaTypeAdapter-annotationを使用して行われます。

XStreamをご覧ください: http://x-stream.github.io

19
Gary Kephart

使用可能なJava 6は、注釈付きJavaオブジェクトをXMLに変換するAPIです。次のコードは、注釈付きオブジェクトをXML文字列に変換する方法を示しています

final JAXBElement <Type> o = new ObjectFactory()。createElement(new Type()); 
 
 final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller(); 
 
 //結果をより人間に読みやすくしたい場合にこれを行います。
 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT、true); 
 m.marshal(o、System 。でる);

スキーマ検証を追加することにより、これをさらに拡張できます(非常に遅いことに注意してくださいが、デバッグには便利です)

final JAXBElement <Type> o = new ObjectFactory()。createElement(new Type()); 
 
 final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller(); 
最終スキーマスキーマ= SchemaFactory.newInstance(
 "http://www.w3.org/2001/XMLSchema").newSchema(
 getClass()。getResource("/META-INF /wsdl/schema.xsd"));
m.setSchema(schema);
m.marshal(o、System.out);

Typeが定義された要素である場合、JAXBElementへの型変換を行う必要はありません。 (つまり、アノテーション@XmlRootElementがあります)

4

JAXBの使用を決定した場合は、必ずJAXBContextをキャッシュしてください。 JAXBContext.newInstanceは非常に高価であることが知られています。 xmlへの変換がロギングで使用され、JAXBContext.newInstanceがキャッシュされない場合、20人の同時ユーザーによって呼び出されたときに最大5秒のパフォーマンスオーバーヘッドが発生するケースを文書化しました。

http://app-inf.blogspot.com/2012/10/performance-tuning-logging-right-way.html

これは、JAXBを使用している人をがっかりさせるものではありません。 JAXBContextがキャッシュされると、上記のリンクで説明したように、パフォーマンスが優れています。

3
user1738754

Java.beans.XMLEncoderとJava.beans.XMLDecoderはどうですか?

http://www.rgagnon.com/javadetails/Java-0470.html の例

またね.

3
RealHowTo

このスペースには多くのオープンソースフレームワークがあります。ただし、その名前が示すとおり、 Simple は、シリアル化を実行する最も簡単な方法です。 チュートリアル をご覧ください。別の機能は、ポリモーフィックシリアル化を実行できることです。これは、たとえばJAXBほど制約されないことを意味します。

1
ng.

XMLBeans は、JAXBに似たもう1つのものです。私はしばらくJAXBを見ていないので、XMLBeansと比較するとかなり悪かったのですが、それは何年も前でした(そして、サードパーティのものよりもJDKのものを使用することを好みますが、今日までのXMLBeans)。

1
TofuBeer