Webサービスのコーディングおよびテストこのレッスンでは、Webサービス/セッションBeanクラスにコードを追加し、JPEGファイルのバイト配列への変換と、バイト配列のjava.awt.Imageオブジェクトへの変換を実行します。公開されているWebサービス操作にコードを追加し、これらのImageオブジェクトが返されるようにします。IDEの「Webサービスをテスト」ユーティリティを使用して、Webサービスをブラウザでテストします。Webサービスの完全版サンプルは、NetBeansサンプル・カタログからダウンロードできます。Webサービスのコーディングおよびテストバイナリ・データを渡すためのスキーマとWSDLファイルの変更Swingクライアントの作成このレッスンの目次WebサービスのコーディングJPEGファイルをバイト配列として取得バイト配列をイメージとして読み取るgetFlowerの実装すべてのJPEGファイルのバイト配列のリストの作成getThumbnailsの実装WebサービスのテストWebサービスのコーディング一連のJPEGファイルとWebサービスが含まれるWebアプリケーションを作成しました。このWebサービスは、ステートレス・セッションBeanとして実装されています。このWebサービスには、2つの空のWeb操作が含まれています。このレッスンでは、Webサービスにコードを追加し、JPEGファイルのバイト配列への変換と、バイト配列のjava.awt.Imageオブジェクトへの変換を実行します。公開されているWebサービス操作にコードを追加し、これらのImageオブジェクトが返されるようにします。JPEGファイルをバイト配列として取得この項では、1組のプライベート・メソッドをFlowerServiceクラス本文に追加します。これらのメソッドは、花の名前を取得し、その花のJPEGファイルへのパスを作成し、JPEGファイルのバイナリ表現(バイト配列)を返します。後の項では、公開されているWebサービス操作にコードを追加して、操作がこれらのプライベート・メソッドをコールするようにします。プロジェクトの「ソース」ビューを開きます。イメージの名前を取得し、その名前に基づいてイメージへのパスを作成し、そのイメージをバイト配列として取得するコードを追加する必要があります。次のコードをFlowerServiceクラス本文に入力または貼り付けます。getBytes(resource);}IDEがクラスURLを見つけられないことを示す警告が表示されます。(Macの場合は[⌘]-[Shift]-[I])を押して追加します。新しい警告が表示されます。この警告は、IDEがgetBytesメソッドを見つけられないことを示します。警告アイコンを左クリックし、ヒントをクリックしてgetBytesメソッドを作成します。作成したばかりのgetBytesメソッドがエディタでフォーカスされます。メソッドに次のコードを追加します。このコードは、getFlowerBytesメソッドから渡したURLへの接続を開き、InputStreamを返します。次に、1024バイトごとに入力ストリームを読み取り、そのバイトをバイト配列バッファに保存して、バッファからByteArrayOutputStreamに書き込みます。bos.toByteArray();}java.io.InputStreamとjava.io.ByteArrayOutputStreamのインポート文を追加します。バイト配列をイメージとして読み取るこの項では、プライベート・メソッドをFlowerServiceクラス本文に追加します。このメソッドでは、JPEGファイルを表すバイト配列を取得し、java.awt.Imageオブジェクトを返します。バイト配列は、JPEGファイルをバイト配列として取得の項で作成したgetBytes(URL)メソッドによって作成されることに注意してください。FlowerServiceクラス本文で、getImageという次のプライベート・メソッドを追加します。getImageメソッドの戻り値の型はImageです。このメソッドは、2つのパラメータを取ります。最初のパラメータは、getBytesメソッドによって作成されるバイト配列です。2番目のパラメータは、イメージがサムネイルかどうかを示すブールです。getImageメソッドは、IOExceptionをスローします。}getImageメソッドの本文で、このメソッドがパラメータとして取得するバイト配列からByteArrayInputStreamを作成する行を追加します。ByteArrayInputStream(bytes);ByteArrayInputStreamからObjectを作成する行を追加します。bis;汎用のObjectからImageInputStreamを作成する行を追加します。ImageIO.createImageInputStream(source);JPEGファイルのデコードが可能な、現在登録されているすべてのImageReaderからIteratorを作成する行を追加します。ImageIO.getImageReadersByFormatName("jpeg");Iteratorの次の要素からImageReaderを作成する行を追加します。readers.next();デフォルトのイメージ読取りパラメータを作成する行を追加します(ただし、Imageがサムネイルを表す場合はイメージ読取りパラメータに4対1のサブサンプリング処理を追加)。0);}最後に、ImageReaderオブジェクトを使用してImageInputStreamオブジェクトを読み取り、そのオブジェクトに基づくImageとイメージ読取りパラメータを返すコードを追加します。(MacOSの場合は[⌘]-[Shift]-[I])を押します。「すべてのインポートを修正」ダイアログが開きます。「すべてのインポートを修正」のデフォルトの修正候補をすべて受け入れ、「OK」をクリックします。これでgetImageメソッドは完成です。名前によって花を取得してその花のイメージを返すために、次の実装コードをgetFlower()メソッドに追加します。このコードは、getFlowerBytes(name)プライベート・メソッドをコールし、JPEGファイルをバイト配列として取得することに注意してください。次に、getImageプライベート・メソッドをコールし、バイト配列をImageオブジェクトとして返します。false);}すべてのJPEGファイルのバイト配列のリストの作成FlowerServiceのクラス本文の先頭で、すべての花の名前の文字列配列を作成します。"sunflower"};ArrayListを作成し、すべての花のバイト配列をListに追加するメソッドを追加します。flowers;}java.util.ArrayListとjava.util.Listのインポート文を追加します。getThumbnailsの実装getThumbnails()メソッドを次のように変更します。ここでは、実装コードを追加し、戻り値の型をListからList<Image>に変更することに注意してください。getImageメソッドのisThumbnailのブール値にtrueを渡すことに注意してください。getThumbnails実装コードはallFlowersメソッドをコールし、すべてのJPEGファイルのバイト配列のリストを作成します。次に、getThumbnailsメソッドはImageのListを作成し、それぞれの花のgetImageメソッドをコールすることで、その花のバイト配列をImageオブジェクトとして返し、そのImageをListに追加します。flowerList;}これで、Webサービス/セッションを組み合せたBeanは完成しました。このWebサービス・クラスの最終的な形は次のようになります。}}WebサービスのテストWebサービスが完成したので、デプロイとテストを実行できます。Webサービスをテストするには:「FlowerAlbumService」ノードを右クリックし、「デプロイ」を選択します。IDEはソース・コードをコンパイルし、GlassFishサーバーを起動して、プロジェクトのWARファイルをサーバーにデプロイします。「サービス」ウィンドウを開くと、デプロイされたFlowerServiceがサーバーの「アプリケーション」ノードに表示されます。Editionはバージョン3.1以降である必要があります。プロジェクトの「Webサービス」ノードを展開します。「FlowerService」を右クリックし、「Webサービスをテスト」を選択します。Webサービスのテスト・ページがブラウザで開きます。「getFlower」パラメータ・フィールドに「rose」と入力します。「getFlower」ボタンを押します。IDEが、この呼出しに関する情報をブラウザに表示します。Returned」を見ると、中身が文字化けしていることがわかります。見たいのは記号の羅列ではなく、イメージです。java.awt.Imageは有効なスキーマ・タイプではないため、バイナリのimage/jpegデータを返すようにスキーマ・ファイルを手動で構成する必要があります。これは、次のチュートリアルで行います。EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。