JAXBによるWSDLのJavaへのバインディング

JAXB (Java Architecture for XML Binding API)を使用すると、Javaプログラミング言語で書かれたアプリケーションからXMLドキュメントに簡単にアクセスできるようになります。JAXBは、XMLドキュメントのデータにアクセスするための、SAXまたはDOMパーサーの使用にかわる方法です。JAXBを使用してXMLドキュメントにアクセスする場合、最初にスキーマに相当する一連のJavaクラスにXMLドキュメントのスキーマをバインドします。その後、XMLドキュメントをアンマーシャリングします。ドキュメントのアンマーシャリングとは、ドキュメントの内容と構成を表すコンテンツ・オブジェクトのツリーを作成することを意味します。

また、JAXBを使用してXMLドキュメントをビルドすることもできます。JAXBを使用してXMLドキュメントをビルドするには、最初に、ビルドするXMLドキュメントのスキーマをバインドします。その後、コンテンツ・ツリーを作成します。最後に、コンテンツ・ツリーをマーシャリングしてXMLドキュメントにします。

Java Architecture for XML Binding APIの次の図に、JavaアプリケーションからXMLドキュメントにアクセスする処理とXMLドキュメントをビルドする処理の両方を示します。

JavaからXMLにアクセスまたはXMLを作成するためのJAXB処理を示す図

このチュートリアルではJAXBのためのNetBeans IDEツール・サポートを示します。このチュートリアルでは、具体的に次の3点を学びます。

  • IDEでウィザードを使用して、XMLドキュメントのスキーマをそのスキーマに相当する一連のJavaクラスにバインドし、ドキュメントをそれらのクラスにアンマーシャリングする方法。
  • JAXBで生成されたクラスをアプリケーション・コード内で使用する方法。
  • JavaコードをXMLスキーマ・ドキュメントにマーシャリングする方法。

JAXBアーキテクチャおよびJAXBそのものに関する詳細は、Java Webサービスのチュートリアル第2章: XMLスキーマおよびJavaクラスのバインディングおよび第3章: JAXBの使用を参照してください。

目次

このページの内容は、NetBeans IDE 7.2、7.3および7.4に適用されます

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE Java EEダウンロード・バンドル
Java Development Kit (JDK) バージョン7またはバージョン6
このチュートリアルで使用するWSDLファイル CreditReportSimple.wsdl

TomcatおよびGlassFishサーバーは、どちらもNetBeans IDEのWebおよびJava EEの配布とともにインストールできます。または、GlassFishサーバーのダウンロード・ページApache Tomcatのダウンロード・ページからダウンロードすることもできます。

XMLドキュメントからのJavaオブジェクトの生成

この課題の目標は、プロジェクトを作成し、XMLドキュメントからJavaオブジェクトを生成することです。

  1. CreditReportSimple.wsdlをダウンロードし、選択した場所にこれを保存します。
  2. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Java」を選択します。「プロジェクト」で「Javaアプリケーション」を選択して、「次」をクリックします。
  3. 「プロジェクト名」に「JseSimpleClientReport」と入力して「終了」をクリックします。「プロジェクト」ウィンドウにJseSimpleClientReportプロジェクトが表示されます。
  4. 「プロジェクト」ウィンドウで「JseSimpleClientReport」ノードを右クリックし、「新規」>「その他」>「XML」>「JAXBバインディング」を選択します。「次」をクリックします。新規JAXBバインディング・ウィザードが表示されます。
    JAXBウィザード

    このウィザードの設定は、次の目的のために使用されます。

    • バインディング名。新しいJAXBバインディングを識別するために使用される名前を指定します。
    • プロジェクト。現在のプロジェクトの名前を表示します。
    • スキーマ・ファイル。作業対象のファイルは、ローカルまたはオンラインのどちらでも使用できます。
    • スキーマ・タイプ。次のXMLスキーマ言語がサポートされます。
      • XMLスキーマ
      • Relax NG - 簡易なXMLスキーマ言語。XML構文
      • Relax NG Compact - 簡易なXMLスキーマ言語。非XML構文
      • XML DTD - XMLスキーマよりも古い選択肢
      • WSDL - Webサービス記述言語。SOAPベースのWebサービスを定義するためのXMLスキーマ言語。
    • パッケージ名。Javaオブジェクトの生成先となるパッケージを指定します。
    • コンパイラ・オプション。Java EE 7チュートリアルの該当箇所で説明しているように、多くのコンパイラ・オプションが使用できます。ただし、JAXBウィザードに関しては、次の項目のみが該当し、ウィザードのチェックボックスを使用して設定できます。
      • nv。入力スキーマの厳密な検証を実行しません。デフォルトでは、ソース・スキーマの厳密な検証は、処理前に実行されます。これはバインディング・コンパイラが何の検証も実行しないという意味ではないことに注意してください。単に厳密でない検証を実行するという意味です。
      • 読取り専用。コンパイラが、生成されるJavaソースに読取り専用のマークを付けるようにします。デフォルトでは、コンパイラは、生成するJavaソース・ファイルを書込み保護しません。
      • npa。**/package-info.javaへのパッケージ・レベルの注釈の生成を抑制します。このスイッチを使用すると、生成されたコードが、他の生成されたクラスにこれらの注釈を取り込みます。
      • 詳細。進捗情報や警告など、コンパイラの出力を最大にします。
      • 非表示。進捗情報や警告など、コンパイラの出力を無効にします。
    • 拡張の使用。デフォルトでは、コンパイラはJAXB仕様の互換性の章で説明されているルールを厳密に実行します。またデフォルト(厳密)モードでは、この仕様で定義されたバインディング・カスタマイズのみを使用するように制限されます。このオプションにより、JAXBベンダー拡張の使用が許可されます。
    • バインディング・ファイルの使用。1つまたは複数のJAXBバインディング・カスタマイズ・ファイルをインポートおよび編集できます。
    • カタログ・ファイルの使用。OASISカタログ・ファイルをインポートおよび編集できます。
  5. 「バインディング名」に「CreditReport」と入力します。
  6. 「スキーマ・ファイル」で「ローカル・ファイル・システムから選択」を選択します。「参照」をクリックし、このチュートリアルの開始時にダウンロードしたWSDLファイルを参照します。
  7. 「スキーマ・タイプ」ドロップダウン・メニューで「WSDL」を選択します(IDEによって自動的に選択されている場合を除く)。

    注意: WSDLスキーマのサポートは試験段階であり、WSDLスキーマをアクティブ化するには-wsdlオプションを使用する必要があることを示す警告が表示される場合があります。この警告は無視してください。

  8. 「パッケージ名」にorg.netbeans.j2ee.wsdl.creditreportと入力します。次のように表示されます。入力されたJAXBウィザード
  9. 「終了」をクリックします。

IDEは、指定されたXMLドキュメントからJavaオブジェクトを生成します。次の項では、IDEでJavaオブジェクトを確認します。

JAXBウィザードの出力の確認

この課題の目標は、NetBeans IDEのツールに慣れ、JAXBウィザードの出力を処理することです。

  1. プロジェクトがビルドされるたびにIDEが再生成する他のアーティファクトと同様、Javaオブジェクトはbuildフォルダに生成されます。「ファイル」ウィンドウを開き、生成されたJavaオブジェクトの場所に移動します。これらのJavaオブジェクトは「プロジェクト」ウィンドウの「生成されたソース」ノードにも表示されます。
    生成されたJavaプロジェクトを表示する「プロジェクト」ビューと「ファイル」ビュー
  2. 次のように、「プロジェクト」ウィンドウでは、WSDLファイルを格納している新しいノードも表示されます。「CreditReport」ノードを右クリックすると再びウィザードが開き、先ほど指定した設定を変更できることに注意してください。
    「JAXBオプションを変更」オプションを表示しているCreditReportのコンテキスト・メニュー
  3. ウィザードで設定を変更したとしても、次のようにすればJavaオブジェクトを再生成できます。
    「Javaコードを再生成」オプションを表示している「JAXBバインディング」のコンテキスト・メニュー

  4. 「WSDL」ファイルを右クリックし、「開く」を選択します。ドキュメントがエディタに表示されます。

XMLドキュメントでIDEが生成する内容について把握できたので、次はこれまで紹介したツールを使用して、生成したJavaオブジェクトから何か実用的な処理をしてみます。

JavaコードからXMLスキーマへのマーシャリング

この課題の目標は、IDEが生成したファイルとコードで何か実用的な処理をすることです。生成されたいずれかのJavaオブジェクトになんらかの値を設定し、IDEの「出力」ウィンドウに表示されるXMLスキーマ・ドキュメントにオブジェクトをマーシャリングします。

  1. 新規Javaアプリケーション・ウィザードが生成したメイン・クラスを開きます。デフォルトでは、このクラスにはプロジェクトの名前JseSimpleClientReport.javaが付けられます。生成されたルートJAXBクラスの1つであるCreditReportmainメソッドの本文で宣言します。
    public static void main(String[] args) {
    CreditReport cr = new CreditReport();
    }
  2. 警告アイコンが表示されます。マウスをこのアイコンの上に移動すると、IDEがCreditReportクラスを見つけられないことを示すツールチップが表示されます。警告アイコンを左クリックし、IDEでインポート文を追加するオプションを選択します。
  3. mainメソッドの本文で「cr」と入力します。IDEによって、このJAXBアーティファクトに関連するコード補完が行われます(システムによっては、[Ctrl]-[Space]を押す必要があります)。
    コード補完のオプション
  4. 次のように、いくつかの値を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));
  5. mainメソッドの本文で、挿入した値の下に「jaxbm」という文字を入力します。これらの文字は「JAXB Marshalling」を表します。次のように表示されます。
    赤い下線付きのjaxbmを表示しているエディタのスニペット

    入力した文字はJavaプログラミング言語の構文に従っていないため、赤い下線が表示されます。ただし、次のステップで使用するNetBeansのコード・テンプレートになります。

    NetBeansにはJAXBアンマーシャリング用のコード・テンプレートもあります。この省略名は「jaxbu」です。

  6. [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 Handle exception
    java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
    }

    警告: コード・テンプレートの拡張は慎重に行ってください。スペースを追加してから[Tab]を押したり、誤入力したフレーズを修正してから[Tab]を押したりすることはできません。[Tab]を押すことができるのは、フレーズを正しく入力した場合のみです。誤入力をした場合は、入力していたフレーズを削除し、フレーズ全体を入力し直してください。

  7. プロジェクト・ノードを右クリックし、「実行」を選択してアプリケーションを実行します。出力ウィンドウに、次のように表示されます。
    クライアント・レポートの出力


関連項目

NetBeans IDEを使用したJava EEアプリケーションの開発方法の詳細は、次のリソースを参照してください。

メーリング・リストに登録することによって、NetBeans IDE Java EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2015, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo