JAXB による WSDL の Java への結合
JAXB (Java Architecture for XML Binding API) を使用すると、Java プログラミング言語で書かれたアプリケーションから XML ドキュメントに簡単にアクセスできるようになります。JAXB は、XML ドキュメントのデータにアクセスするための、SAX または DOM パーサーの使用に代わる方法です。JAXB を使用して XML ドキュメントにアクセスする場合、最初に XML ドキュメントのスキーマに相当する一連の Java クラスに XML ドキュメントのスキーマを結合 します。その後、XML ドキュメントをアンマーシャル します。ドキュメントのアンマーシャルとは、ドキュメントの内容と構成を表すコンテンツオブジェクトのツリーを作成することを意味します。
また、JAXB を使用して XML ドキュメントを構築することもできます。JAXB を使用して XML ドキュメントを構築するには、最初に、構築する XML ドキュメントのスキーマを結合 します。その後、コンテンツツリーを作成 します。最後に、コンテンツツリーをマーシャル して XML ドキュメントにします。
「Java Architecture for XML Binding API 」の次の図に、Java アプリケーションから XML ドキュメントにアクセスする処理と XML ドキュメントを構築する処理の両方を示します。
このチュートリアルでは JAXB のための NetBeans IDE ツールサポートを示します。このチュートリアルでは、具体的に次の 3 点を学びます。
IDE でウィザードを使用して、XML ドキュメントのスキーマをそのスキーマに相当する一連の Java クラスに結合し、ドキュメントをそれらのクラスにアンマーシャルする方法。
JAXB で生成されたクラスをアプリケーションコード内で使用する方法。
Java コードを XML スキーマドキュメントにマーシャルする方法。
JAXB アーキテクチャーおよび JAXB そのものに関する詳細は、Java Web サービスのチュートリアル の「第 2 章: XML スキーマおよび Java クラスの結合 」および「第 3 章: JAXB の使用 」を参照してください。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
Tomcat および GlassFish サーバーは、どちらも NetBeans IDE の Web および Java EE の配布とともにインストールできます。または、GlassFish サーバーのダウンロードページ か Apache Tomcat のダウンロードページ からダウンロードすることもできます。
XML ドキュメントからの Java オブジェクトの生成
この課題の目標は、プロジェクトを作成し、XML ドキュメントから Java オブジェクトを生成することです。
CreditReportSimple.wsdl をダウンロードし、選択した場所にこれを保存します。
「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Java」を選択します。「プロジェクト」で「Java アプリケーション」を選択して、「次へ」をクリックします。
「プロジェクト名」に「JseSimpleClientReport 」と入力して「完了」をクリックします。「プロジェクト」ウィンドウに JseSimpleClientReport プロジェクトが表示されます。
「プロジェクト」ウィンドウで「JseSimpleClientReport 」ノードを右クリックし、「新規」>「その他」>「XML」>「JAXB 結合」を選択します。「次へ」をクリックします。「新規 JAXB 結合」ウィザードが表示されます。
このウィザードの設定は、次の目的のために使用されます。
結合名。 新しい JAXB 結合の名前を指定します。これは結合を識別するのに使用されます。
プロジェクト。 現在のプロジェクトの名前を表示します。
スキーマファイル。 作業対象のファイルは、ローカルまたはオンラインのどちらでも使用できます。
スキーマタイプ。 次の XML スキーマ言語がサポートされます。
パッケージ名。 Java オブジェクトの生成先となるパッケージを指定します。
コンパイラオプション。 『Java EE 5 チュートリアル』 で説明しているように、多くのコンパイラオプションが使用できます。ただし、JAXB ウィザードに関しては、次の項目だけが該当し、ウィザードのチェックボックスを使用して設定できます。
nv。 入力スキーマの厳密な妥当性検査を行いません。デフォルトでは、ソーススキーマの厳密な妥当性検査は、処理前に実行されます。これは結合コンパイラが何の妥当性検査も実行しない という意味ではありません。単に厳密でない妥当性検査を実行するという意味です。
読み取り専用。 強制的にコンパイラが、生成される Java ソースを読み取り専用に指定するようにします。デフォルトでは、コンパイラは、生成する Java ソースファイルを書き込み保護しません。
npa。 「**/package-info.java 」へのパッケージレベルの注釈の生成を無効にします。このスイッチを使用すると、生成されたコードが、別の生成されたクラスにこれらの注釈を取り込みます。
詳細。 進捗情報や警告など、コンパイラの出力を最大にします。
非表示。 進捗情報や警告など、コンパイラの出力を無効にします。
拡張を使用。 デフォルトでは、コンパイラは『JAXB 仕様』の「互換性」章で説明されているルールを厳密に実行します。またデフォルト (厳密) モードでは、この仕様で定義された結合カスタマイズだけを使用するように制限されます。このオプションにより、JAXB ベンダー拡張の使用が可能になります。
結合ファイルを使用。 1 つまたは複数の JAXB 結合カスタマイズファイルをインポートおよび編集できます。
カタログファイルを使用。 OASIS カタログファイルをインポートおよび編集できます。
「結合名」に「CreditReport 」と入力します。
「スキーマファイル」で「ローカルファイルシステムから選択」を選択します。「参照」をクリックし、このチュートリアルの開始時にダウンロードした WSDL ファイルを参照します。
「スキーマタイプ」ドロップダウンメニューで「WSDL」を選択します (IDE によって自動的に選択されている場合を除く)。
注: WSDL スキーマのサポートは試験段階であり、WSDL スキーマを有効にするには -wsdl オプションを使用する必要があることを示す警告が表示される場合があります。この警告は無視してください。
「パッケージ名」に org.netbeans.j2ee.wsdl.creditreport と入力します。画面は次のようになります。
「完了」をクリックします。
IDE は XML ドキュメントから Java オブジェクトを生成します。次の節では、IDE で Java オブジェクトを確認します。
JAXB ウィザードの出力の確認
この課題の目標は、NetBeans IDE のツールに慣れ、JAXB ウィザードの出力を処理することです。
プロジェクトが構築されるたびに IDE が再生成するほかのアーティファクトと同様、Java オブジェクトは build フォルダに生成されます。次のように「ファイル」ウィンドウを開き、生成された Java オブジェクトの場所に移動します。これらの Java オブジェクトは「プロジェクト」ウィンドウの「生成されたソース」ノードにも表示されます。
次のように、「プロジェクト」ウィンドウでは、WSDL ファイルを格納している新しいノードも表示されます。「CreditReport」ノードを右クリックするとふたたびウィザードが開き、先ほど指定した設定を変更できます。
ウィザードで設定を変更したとしても、次のようにすれば Java オブジェクトを再生成できます。
「WSDL」ファイルを右クリックし、「開く」を選択します。内容がエディタに表示されます。
XML ドキュメントで IDE が生成する内容について把握できたので、次はこれまで紹介したツールを使用して、生成した Java オブジェクトから何か実用的な処理をしてみます。
Java コードから XML スキーマへのマーシャル
この課題の目標は、IDE が生成したファイルとコードで何か実用的な処理をすることです。生成されたいずれかの Java オブジェクトに何らかの値を設定し、IDE の「出力」ウィンドウに表示される XML スキーマドキュメントにオブジェクトをマーシャルします。
「新規 Java アプリケーション」ウィザードが生成したメインクラスを開きます。デフォルトでは、このクラスにはプロジェクトの名前 JseSimpleClientReport.java が付けられます。次のように、生成されたルート JAXB クラスの 1 つである CreditReport を main メソッドの本文で宣言します。
public static void main(String[] args) { CreditReport cr = new CreditReport(); }
警告アイコンが表示されます。マウスをこのアイコンの上に移動すると、IDE が CreditReport クラスを見つけられないことを示すツールチップが表示されます。警告アイコンを左クリックし、IDE でインポート文を追加するオプションを選択します。
main メソッドの本文で「cr」と入力します。IDE によって、この JAXB アーティファクトに関連するコード補完が行われます (システムによっては、Ctrl- スペースキーを押す必要があります)。
次のように、いくつかの値を JAXB クラスで設定します (java.math.BigInteger のインポート文を追加)。
cr.setFirstName("Butros Butros"); cr.setLastName("Gali"); cr.setDob("1930/05/30"); cr.setScore("900"); cr.setSsn("123-45-6789"); cr.setLatestAddress1("2500 Some Ave"); cr.setLatestAddress2("Suite 5000"); cr.setCity("New York"); cr.setState("New York"); cr.setCountry("USA"); cr.setPostalCode("NY 12345-6789"); cr.setCurrency("USD"); cr.setLiability(BigInteger.valueOf(2000000)); cr.setLiquidAssests(BigInteger.valueOf(3000000)); cr.setImmovableAssests(BigInteger.valueOf(5000000));
main メソッドの本文で、挿入した値の下に「jaxbm」という文字を入力します。これらの文字は「JAXB Marshalling 」を表します。画面は次のようになります。
入力した文字は Java プログラミング言語の文法に従っていないため、赤い下線が表示されます。ただし、次の手順で使用する NetBeans のコードテンプレートになります。
NetBeans には JAXB アンマーシャル用のコードテンプレートもあります。この省略名は「jaxbu」です。
Tab キーを押します。
「jaxbm」の文字が拡張され、次のようなコードスニペットが表示されます。
try { javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(cr.getClass().getPackage().getName()); javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(cr, System.out); } catch (javax.xml.bind.JAXBException ex) { // XXXTODO 例外を処理 java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N }
警告: コードテンプレートの拡張は慎重に行ってください。スペースを追加してからタブキーを押したり、誤入力したフレーズを修正してからタブキーを押したりすることはできません。タブキーを押すことができるのは、フレーズを正しく入力した場合のみです。誤入力をした場合は、入力していたフレーズを削除し、フレーズ全体を入力し直してください。
プロジェクトノードを右クリックし、「実行」を選択してアプリケーションを実行します。出力ウィンドウに、次のように表示されます。
関連項目
NetBeans IDE を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。
nbj2ee
@
netbeans.org
メーリングリスト に登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。