2015年7月25日土曜日

ハイレゾプレーヤー(PonoPlayer)の使用感もろもろ。

PonoPlayerとは

PonoPlayerは、ロックミュージシャンのニール・ヤングがKickstarterで出資を募り、音楽の音質にこだわって制作したハイレゾプレーヤー。音響の設計はオーディオメーカーのAyre Acousticsが担当している。また、Firmware Version 1.0.5からはDSDにも対応している。残念ながらイコライザーやエフェクト機能はついていない。現在下記のフォーマットに対応している。

  • DFF/DSF[DSD64,DSD128](from Firmware Version 1.0.5)
  • FLAC
  • ALAC
  • MP3
  • WAV
  • AIFF
  • AAC (保護なし)

私は、少し前にKickstarterに出資して入手したが、今はPonoPlayerの公式サイトからAmazon.comへリンクがあり、そちらから購入が可能。価格は$399とハイレゾプレーヤーとしはお手頃な部類だと思う。
DACは、ESS ES9018Mを使用している。メモリは内臓64GBとmicroSDカードスロットが1つ、そして、付属品として64GBのmicroSDが付いている。ただ、現在Amazon.comの商品説明にはmicroSDが付属と書いていないようなので、mircoSDが付属するのはKickstarterで購入したロットのみかもしれない。

あと、特徴的なのは、本体上部に3.5mmのステレオミニジャックが2基あり、通常左側がヘッドフォン端子、右側がライン端子になっており、モードを切り替えることにより、ステレオミニジャックが2基使用したバランス接続が可能となる。バランス接続することにより、より高音質な再生を楽しめるみたいなのだが、残念ながら私はバランス接続できるヘッドフォンを持っていないのでその辺の使用感は語れないのだけれど。


ファーストインプレッション



まず最初に驚いたのが木箱に入って届いてきたこと。そして本体が思った以上にでかいということ。左の写真は、SonyのNW-S760シリーズとの比較。そして、本体には「+」「○」「-」3つのボタンしかないシンプルさ。ちなみに「○」で電源のオン/オフ、及び、再生中の一時停止(シングルクリック)、曲送り(ダブルクリック)、曲戻し(トリプルクリック)を行い、「+」、「-」でボリューム調整ができる。そのほか通常の操作は液晶がタッチパネルになっており、そちらで操作を行う。タッチパネルの操作は、反応が過敏というかスワイプが単なるクリックになってしまうことが多く思った通りの操作ができず、自分としてはボタンでの操作の方がいいと思った。ただ、ファームのバージョンアップによって改善はされているので今後に期待かも。


サウンド

肝心な再生音に関する印象。ヘッドフォンには、audio-technicaのATH-W1000を使用。
正直、それほど期待していたわけではなかったのだが、実際の音を聴いて良い意味で驚いた。再生音は原曲に忠実かつ力強くクリアな印象。まずはmp3の再生ん音の実力を見極めるため、自分が保有しているHD60GD9とで、同じmp3のファイルを再生し、聴き比べてみた。D60GD9と比べるとやや繊細さに欠けるというか左右の音の分解があいまいな印象を受けるが、ほとんど差がない印象。左右の音の分解性能に関しては、バランス接続すればある程度解消されると期待はしている。

次にハイレゾの再生音を確認するためにmoraで配信されているハイレゾであるflacのファイル(96kHz/24bit)を購入し、聴いてみたところ、もうこれは別次元だった。正直付属のヘッドフォンをハイエンドのヘッドフォンに変更した時以来の衝撃を受けた。ちょっと言い過ぎかもしれないが、ハイレゾとして配信されている曲をmp3とで同じヘッドフォンを使用して聴いてみると、mp3では聴こえなかった音が聞こえるというか、音の密度がちがうという印象を受ける。
ハイレゾの曲を聴いたとき、昔CDよりレコードの方が音が言っていた人がいるのを思い出し、それが少し理解できた。ハイレゾを聴いた後では、CDの音はどこか薄く感じてしまう。例えるならCDの音がmp3の128Kbpsだとするとflacはmp3の256Kbpsの曲という感じ。

評価結果としては下記のような感じだろうか。
PonoPlayer(mp3) (≒)< HD60GD9(mp3) << PonoPlayer(flac)

その他

PonoPlayerには専用のponomusic worldというPC用の専用アプリがあり、そこから、ponomusicで配信されている曲の購入やプレイヤーの転送ができる。ponomusicから曲を購入しなくても、Sony Network Entertainment の Media Goなどとファイルを共有(同じフォルダで管理)すれば、Media Goからで購入したハイレゾ(flac)の曲のファイルをponomusicを使用してPonoPlayerに転送することができる。
ファームのバージョンアップファイル等もponomusic worldから転送するので、ponoplayerを購入した場合、ponomusic worldはPCにインストールはしていた方が良いだろう。

CDとハイレゾ配信

今後アルバムなどを購入するCDとハイレゾ配信のいずれの形態で購入するかかが悩みの種になりそう。
自分は物で持っていたい派なので、正直ジャケットや歌詞カードなどが欲しいがためにCDのような形で手に入れたいのだが、音楽として考えるとハイレゾとして配信されているファイルの方が良いに決まっているし。

CD買ったらハイレゾ配信のファイルもダウンロード可能という形にはならないのだろうか。。。もしくは、ハイレゾ配信のファイルをもっと安くするとか。



2015年7月30日 DSDの対応について更新しました。

2015年6月21日日曜日

ハイエンドヘッドフォン(イヤフォン)への道
(今となってはミドルエンド?)

唐突ではあるが自分が使用してきた主なイヤフォンを紹介していきたと思う。
ただ、イヤフォンは正直2万を超えるあたりから投資額に見合った変化がなくなっていくと思うので、この先は好みの音にターゲットを絞っていくのが賢明だと思う。そして、その参考になれば幸いです。
とはいえ最近のハイエンド(IE800とかRoxanneとか)が気になり始めてる。

Bose in-ear headphones (TriPort®IE)

一番最初に購入したハイエンドイヤフォン。それまではあまりイヤフォンの性能とかをあまり気にしていなかっただが、会社の後輩から借りて聞いたときの衝撃は今でも忘れられない。それは今まで聴いていた時間をごっそり損していたなと感じるほどに。
このヘッドフォンは、中・低音の重量感が素晴らしい。もっとも、後で知ったことなのだが、このイヤフォンにはパッシブ・イコライザーが内蔵されいるらしく、多分にパッシブ・イコライザーのおかげっぽいんだけど。ただ、このイヤフォンで聴くとBoseらしいというか、どの曲を聴いてもいわゆるBoseサウンドになってしまい、生の音をそのまま聴きたいという用途には向いていないと思う。
また、このイヤフォン良くも悪くも外部の音はほとんど素通り状態。外部の音を遮断したくない時には重宝するが逆に電車とか外部のノイズを遮断したい用途には向かない。

総合★★★☆☆サウンドトラックなどBGMサウンドとしてまったり聴くのには最適
高音★★★☆☆可も不可もなく無難にまとまった音
中低音★★★★☆パッシブイコライザーのおかげで重厚な音が聴ける
解像度★★☆☆☆解像度はあまり高くなくまったり聴かせる感じ
遮音性★☆☆☆☆ほとんどなし
装着感★★★★☆圧迫感がなく長時間つけても違和感を感じない

audio-technica ATH-CK10

Bose in-ear headphonesをしばらく使っていて、元の音をもっと素直に聴かせてくれるイヤフォンが欲しくなって購入したのがこれ。初めてバランスド・アーマチュア型のイヤフォンを購入したんだけど、これがまた衝撃だった。イヤフォンで音の解像度という用語の意味がはじめて分かった気がした。このイヤフォンで曲を聴くと音の一つ一つがはっきりして今まで気が付かなかった音がいっぱいあることを感じた。また、音の立ち上がり(反応)も早く、立ち上がり部分もはっきりと聴こえ、ボーカルとかの息遣いが感じられる。それから、このヘッドフォンの装着感はすばらしく、重量が軽く耳にすっぽりとはまる感じで長時間つけていても全く苦にならない。遮音性も非常に高く電車内でもノイズキャンセル機能なんてこれがあればいらないじゃんと思える。
ただ、このイヤフォンも万能ではなく、音はいわゆるaudio-technicaが得意とするドンシャリ系でよく言えば高音域はきらきらした感じできれいな感じだが、高音が苦手な人は長時間聴いているとちょっと疲れてくる。また、ドライバーが2つしかなく、中高音をターゲットにしているため、低音域は少し物足りない感じが否めない。

総合★★★★☆中高音の音をきらびやかに聴きたいときにおすすめ
高音★★★★☆高音域は解像度も高く素晴らしいが、長時間聴いていると聴き疲れするかも
中低音★★★☆☆中低音は少し物足りない
解像度★★★★★解像度は高い
遮音性★★★★★耳栓レベルの高い遮音性
装着感★★★★★自分が持っているイヤフォンではこれを超える装着感のものはない


audio-technica SOLID BASS ATH-CKS1000LTD

ATH-CK10にそれほど不満はなかったんだけど、やはりインストルメンタル系の曲を聴くと、ATH-CK10どうしても低音域の迫力が足りなくて低音が強く出るものを探している過程で購入したイヤフォン。このイヤフォンは全体的に高レベルにまとまってきれいに音が出るのでとても良い。特に低音域の響きは素晴らしいものがある。ただ、難点があるとするとコードの素材が固いせいかコードをこすってしまった時や風が当たった時にコードからのノイズが入りやすく、通勤時などの歩きながら使う用途にはあまり向いていない。

総合★★★★☆どんなソースでも無難に再現してくれる
高音★★★★☆audio-technicaらしいきらびやかな高音域の音
中低音★★★★★中低音も響きは素晴らしい
解像度★★★★☆解像度もそこそこ高い
遮音性★★★★☆そこそこ高い
装着感★★★★☆ちょっと本体が大きいので長時間つけてると疲れる

JVC HA-FXT90

これは“カーボンナノチューブ振動板”採用というものがどんな音がするのか興味本位で購入しただけなんだけど、聴いた途端スピーカーで聴いているような音圧を感じたのですごい驚いた。もともとイヤフォンで聴くのはあまり好きでなく、外出時以外ではイヤフォンを使用することはほとんどなくスピーカーで聴いているため、最初にこれの音を聴いたときはまさにこういうもの探していただという気持ちだった。バランスド・アーマチュア型に比べれば解像度は低いのは確かなんだけど、このスピーカーで音楽を聴いているという感じがたまらなく好きになり愛用の一品となった。ただ、これを購入した当初、カーボンナノチューブを使用したモデルがこれ(ミドルエンド)しかなく、もう少し解像度も改良されたものがほしいなとは思っていた。


総合★★★☆☆値段の割にはいい音が出ていると思う。なんとちってもスピーカーで来ているような感じが良い
高音★★★☆☆高音域は少し弱い
中低音★★★★☆中低音の響きは素晴らしい
解像度★★★☆☆解像度値段相応
遮音性★★★★☆そこそこ高い
装着感★★★☆☆フィット感は少しもの足りない

JVC HA-FXZ200 LIVE BEAT

JVC HA-FXT90の発売後、待望の“カーボンナノチューブ振動板”採用のハイエンドモデル。そして今一番のお気に入り。HA-FXT90で弱かった高音域の音や音の解像度も向上しかなりいい感じに仕上がったモデル。音の音圧感もさらに強化されよりスピーカーで聴いているような感じが強くなった。もちろんバランスド・アーマチュア型に比べれば解像度は低いのでモニタ用途には向いていないとは思うけど。
ただ、スピーカーで音楽を聴くような感じで聴く分には申し分ないと思う。


総合★★★★★個人的には一番のおすすめ(好み)
高音★★★★☆高音域は少し弱い
中低音★★★★★中低音の響きは素晴らしく力強い
解像度★★★★☆解像度もハイエンドとしてなかなか高いレベル
遮音性★★★★☆そこそこ高い
装着感★★★★☆フィット感は少しもの足りなく、個人的にこのイヤフォンの唯一の弱点だと思ってる

2014年8月23日土曜日

遺伝子検査のMYCODEを申し込んで(注文して)みた ― 結果編

遺伝子検査のMYCODEの結果が届いたので簡単にレポートする。
(申込みに関する内容は、申込み編を参照してください。)

概要

私が申し込んだ「オールインワン280+」の検査レポートには、下記2つに分類される項目に対し、その項目に関係する遺伝子情報による評価と、それらの評価を踏まえた生活改善アドバイスが含まれている。生活改善アドバイスは、MYCODEのマイページにある生活習慣アンケートをWeb上で回答することにより、より自分に合ったアドバイスになる。
  • 発症リスク(152項目[2014年8月時点])
    検査レポートでは、がん、生活習慣病など、全部で約150種類の疾患についての発症リスクが日本人平均との比較して何倍であるかが、下図のように示される。
  • 体質(130項目[2014年8月時点])
    検査レポートでは、見た目の特徴、食習慣、血液・代謝関連の項目など、約130種類の体質の遺伝的な傾向が3段階評価として、下図のように示される。
※実際の検査項目は、公式HPの「検査メニュー」のページのメニューごとの「もっと詳しく」で参照できます。

自分は申し込まなかったけど、Web上では有料オプションとして管理栄養士にWeb上で直接相談することができる「生活改善プログラム」というのもある。

また、うれしいことに、今後検査レポートに対し、新たな検査項目を追加したり、すでに結果が出ている項目を最新のもに更新するということを予定しているらしい。


内容について

検査レポートの発症リスクの中で比較的高かった項目(1.80倍以上)は、以下の項目だった。親戚にはがんで亡くなった方が何人かいるのでもっとがん関連の発症リスクが高くでるとおもったけどそうでもなかった。ただ、血液関連の発症リスクは比較的高いように感じた。
それと、円形脱毛症はちょっと気になるな。。。

抗好中球細胞質抗体(ANCA)関連血管炎
心臓・循環器

2.83倍
ウェゲナー肉芽腫
内分泌・血液・代謝

2.77倍
食道がん
がん

2.61倍
円形脱毛症
その他

1.94倍
アルコールとニコチンの共依存症
その他

1.93倍
関節リウマチ
骨・関節

1.87倍
全身性エリテマトーデス(SLE)
骨・関節

1.80倍

実際の発症リスクのレポートにはリスク数値以外に、解析したDNAの遺伝子型の説明や予防や発症の促進につながるとされる環境要因などが解説されており、とても参考になる。
どういった内容かは公式HPの「検査メニュー」のページの下の方に「サンプルレポート」があるのでそちらを参照するとよいと思う。

それから体質の項目には、「見た目の特徴」、「食習慣」、「血液・代謝」などの分類があるのだが、その中でちょっとおもしろいなと思った項目には以下のようなものがあった。

  • 見た目の特長
    • 目の機能(近視や遠視の指標)
    • 小麦色の日焼けのしやすさ
    • 目の色(青に近いかどうか)
    • そばかすのできやすさ
    • 胸のサイズ
  • 食習慣
    • アルコールによる顔の赤くなりやすさ
    • 飲酒傾向
    • 苦味(PROP)の感じやすさ
  • 血液
    • 血圧の高さ
    • 白血球の数
    • ヘモグロビンの量
    • 血小板の数
    • 血糖値の高さ(空腹時)


感想

発症リスクとかは、正直もっと偏るのかと思ったけど案外平均に近いんだなというのが正直な思い。ただ、自身の体の傾向がわかるのでいろいろ生活改善には役立つ気はする。
それから、検査レポートの遺伝子の説明や疾患に関する説明は見ていてなかなか興味深いものがあり、それだけでも価値があるかも。


2014年8月19日火曜日

遺伝子検査のMYCODEを申し込んで(注文して)みた ― 申し込み編

遺伝子検査に興味があったので、DeNAで始まった遺伝子検査サービス(以下MYCODE)に早速申し込んでみた。
MYCODEの遺伝子検査は唾液を専用容器に入れて郵送するだけで検査することができ、検査項目数によって下記3つのメニューが用意されている(詳細はこちら)。
  • オールインワン280+
    病気(がん・生活習慣病)、体質・ダイエット・美容の全検査項目が入ったセット

  • ヘルスケア100+
    がん・生活習慣病の主たる病気と、体質・ダイエット・美容の一部検査が入ったセット

  • カラダ30+
    ダイエット・肥満、栄養、代謝、体型、美容(髪質・肌)、等体質の主要項目が入ったセット

検査は、検査キットを購入するところから始まり、次のような流れになり、検査状況や検査結果は、Web上で確認することとなる。

  1. 検査キットの購入
  2. MYCODEの公式サイトでの会員登録
  3. 遺伝子検査申込書兼同意書/検査コードの登録/唾液採取
  4. 遺伝子検査申込書兼同意書 及び 唾液採取済みの採取容器の送付

検査キットの購入

Amazon(上記リンク)、または、MYCODEの公式サイトで注文することができる。注文すると2~3日くらいで下図のような検査キットが送付されてくる(とりあえず私は先行予約でオールインワン280+を注文)。

遺伝子検査申込書兼同意書/検査コードの登録/唾液採取

検査キットが送付されてきたら、検査キットに同梱されている「遺伝子検査申請書兼同意書」の右下に貼られたシールに記載されいる(検査ガイドに記載されているの例なので間違えないように!)検査コード(3桁-3桁-4桁の数字)をMYCODEのマイページから「登録する」ボタンをクリックし、検査コードを登録する。

次に検査キットに同梱されている「MYCODE遺伝子検査申込付属書」「重要事項確認書」を熟読の上、「遺伝子検査申請書兼同意書」を記入する。「遺伝子検査申請書兼同意書」には、検査を申込む本人に関する情報(住所、電話番号、生年月日、性別)と申込み(購入した)検査メニュー、並びに、検査申込みに関する内容に同意する旨の署名を記入する。
加えて、「研究へのご協力のお願い」への「同意する・しない」(資料及び検査結果を研究に使用してよいかどうか)を記入する(私は同意することにした)。

そして、いよいよ唾液採取セット(下図)により唾液(遺伝子情報の検体)を採取する。検査キットには、唾液を出しやすくするためにレモンの写真(カード)が付いている(笑)。こんな写真いらないんじゃないかと思ったが、思った以上に唾液が必要で、意外と活躍した。


※ここら辺の詳細な手順は、同梱の「検査ガイド」に記載されている。

遺伝子検査申込書兼同意書 及び 唾液採取済みの採取容器の送付

最後に、検査キットに同梱されている返信用封筒に唾液採取済みの採取容器と「遺伝子検査申請書兼同意書」の1枚目(返送用)をいれ、ポストに投函する。返信用封筒の裏面はチェックシートになっているのでそちらを活用する。

※「遺伝子検査申請書兼同意書」

返信用封筒がMYCODEの解析センターに届くと「【MYCODE】検査を開始します」という件名の受領した旨のメールが届く。
そして、2~3週間後に結果が出る(「【MYCODE】検査が完了しました」という件名のメールが届く)らしい。

2014/08/23 8/22に結果が届いたので、結果編をアップしました。検査開始のメールが8/18届いたので実質4日間で検査結果が出たことになるな。

2014年2月16日日曜日

JavaによるProduct Advertising APIのSOAP呼び出し(WS-Securityを利用してSOAPリクエストを処理する方法)

なにかアフィリエイトのサイトを作ろうと、まずは、JavaによるProduct Advertising APIのSOAP呼び出し方法を調べてみた。
ドキュメントには、言語に特化した詳しい説明があまりないので思った以上に苦労したので、その内容(主にJavaによる認証部分の実装手順)を備忘録代わりに残しておこうと思う。
(ただし、利用しているツール、ライブラリ、及びProduct Advertising APIの詳細な内容にはあまり触れないのでそれぞれのサイトを確認してください。)

まず、Product Advertising APIをSOAPによる呼び出し方法(認証の方式)には次の2種類がある。

  • WS-Securityを利用せずにSOAPリクエストを処理する方法
  • WS-Securityを利用してSOAPリクエストを処理する方法

本稿では、WS-Securityを利用してSOAPリクエストを処理する方法を説明する。この方法は、WS-Security1.0を利用し認証を行う。JDK単体ではWS-Seurityまでサポートされていないようなので、JAX-WSの実装としてApache CXFを利用する。また、署名に使用する証明書は、keytoolが公開鍵と秘密鍵が別になった証明書のインポートができない(ここは調査不足の可能性も)ようなので、amazonから提供される証明書ではなく、keytoolで生成した自己署名証明書を使用する。

なお、「WS-Securityを利用せずにSOAPリクエストを処理する方法」はこちらを参照。
今回使用したツール、ライブラリは以下の通りです。

ツール、ライブラリ名バージョン

Java Development Kit
7u51(1.7.0_51)
Eclipse IDE for Java EE Developers
4.3.1
Apache CXF
2.7.8
Tomcat
7.5.0

(1)自己署名証明書(秘密鍵・公開鍵のキーペア)の準備


amazonで有効なアルゴリズムはRSAなので、キーアルゴリズムとしてRSAを指定し、自己署名証明書(秘密鍵・公開鍵のキーペア)を生成する。有効期間は、amazonで生成可能な証明書の期間と同じ1年(365日)を設定している。
>keytool -genkeypair -keyalg RSA -dname <X.500識別名> -alias <キーエイリアス> -keypass <キーパスワード> -keystore <キーストアファイル> -storepass <キーストアパスワード> -validity 365

次に生成した自己署名証明書(秘密鍵・公開鍵のキーペア)から、amazonにアップロードするための公開鍵を同じくkeytoolを使用しRFC 1421 証明書符号化のフォーマット(-rfcオプション)で生成する。

>keytool -exportcert -alias <キーエイリアス> -keystore  <キーストアファイル> -file  <公開鍵ファイル> -storepass <キーストアパスワード> -rfc

生成された公開鍵ファイルは、AWS Management ConsoleのSecurity Credentialsからamazonにアップロードする。

X.500識別名
とりあえず適当に"cn=<名前(英字)>, c=JP"とか指定しておく。
キーエイリアス
証明書(秘密鍵・公開鍵のキーペア)にアクセスするためのエイリアス名
キーストアパスワード
キーストアにアクセスするためのパスワード
キーパスワード
証明書(秘密鍵)にアクセスするためのパスワード
キーストアファイル
証明書(秘密鍵・公開鍵のキーペア)を格納するキーストアファイル
キーストアファイル
amazonにアップロードする公開鍵ファイル(RFC 1421 証明書符号化のフォーマット)
※ここで設定したキーストアファイル、キーストアパスワード、キーエイリアス、キーパスワードは、実際のプログラムでも使用するため、以降ここで定義した名前を使用する。

(2)EclipseにApache CXF、Tomcatを設定する

Apache CXFによりコード生成をするため、まずEclipseにApache CXFの設定を行う。また、クライアントコードを生成するだけなのに、なぜかDynamic web Project(Web Serverの実装がないと)でないとApache CXFのコード生成ができないようなのでTomcatも併せてEclipseに設定する。

Apache CXFの設定
Apache CXFをダウンロードし、適当な場所に展開する。Eclipseの「Window」→「Preferences」→「Web Services」→「CXF 2.x Preferences」を開き、「add」ボタンを押下し、展開した場所を設定する。

追加後、一覧に追加したApache CXFの実装がバージョンと共に表示されるので、追加したApache CXFにチェックを入れる。そのほかの設定はとりあえずデフォルトのままでよい。


Tomcatの設定
同様にTomcatダウンロードし、適当な場所に展開する。Eclipseの「Window」→「Preferences」→「Server」→「Runtime Environments」を開き、「add」ボタンを押下する。


New Server Runtime Environmentが開くので「Apache」→「Apache Tomcat v7.0」を選択し、展開した場所を設定する。


追加後、一覧に追加したTomcatの実装がバージョンと共に表示される。


(3)WSDLからSOAPのクライアントコードを生成する


プロジェクト(Dynamic Web Project)の作成
クライアントコードを生成するためプロジェクトをEclipseのDynamic Web Projectとして作成し、プロジェクトのPropertiesを開き、「Java Build Path」の「Add Library」を押下し、「CXF Runtime」を追加する。


追加後、一覧に追加したApache CXF Libraryが表示される。


クライアントコードの生成
Eclipseの「File」→「New」→「Other」を選択し、Newウィザードで「Web Services」→「Web Service Client」を選択する。「Web Service Client」ウィザードが開くので、「Server definition」にProduct Advertising APIのWSDLのURLを設定し、「Configuration」のServer Runtimeに「Tomcat v7.0 Server」、Web service runtimeに「Apache CXF 2.x」を設定し「Next」をクリックする。


次に、WSDL2Javaの設定ウィザードが開き、自動生成されたパッケージ名が「com.amazon.webservices.awsecommerceservice.2011-08-01」となっており、このままだとJavaの規約違反となるため「com.amazon.webservices.awsecommerceservice._2011_08_01」に変更し「Finish」ボタンを押下する。


「Finish」ボタンを押下後、パッケージcom.amazon.webservices.awsecommerceservice._2011_08_01配下に次のソースが生成される。

Accessories.java
Arguments.java
AWSECommerceService.java
AWSECommerceServicePortType.java
AWSECommerceServicePortTypeImpl.java
AWSECommerceServicePortTypeImpl1.java
AWSECommerceServicePortTypeImpl10.java
AWSECommerceServicePortTypeImpl2.java
AWSECommerceServicePortTypeImpl3.java
AWSECommerceServicePortTypeImpl4.java
AWSECommerceServicePortTypeImpl5.java
AWSECommerceServicePortTypeImpl6.java
AWSECommerceServicePortTypeImpl7.java
AWSECommerceServicePortTypeImpl8.java
AWSECommerceServicePortTypeImpl9.java
AWSECommerceServicePortType_AWSECommerceServicePortCA_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortCN_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortDE_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortES_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortFR_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortIN_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortIT_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortJP_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortUK_Client.java
AWSECommerceServicePortType_AWSECommerceServicePortUS_Client.java
AWSECommerceServicePortType_AWSECommerceServicePort_Client.java
Bin.java
BrowseNode.java
BrowseNodeLookup.java
BrowseNodeLookupRequest.java
BrowseNodeLookupResponse.java
BrowseNodes.java
Cart.java
CartAdd.java
CartAddRequest.java
CartAddResponse.java
CartClear.java
CartClearRequest.java
CartClearResponse.java
CartCreate.java
CartCreateRequest.java
CartCreateResponse.java
CartGet.java
CartGetRequest.java
CartGetResponse.java
CartItem.java
CartItems.java
CartModify.java
CartModifyRequest.java
CartModifyResponse.java
Collections.java
CorrectedQuery.java
CustomerReviews.java
DecimalWithUnits.java
EditorialReview.java
EditorialReviews.java
Errors.java
HTTPHeaders.java
Image.java
ImageSet.java
Item.java
ItemAttributes.java
ItemLink.java
ItemLinks.java
ItemLookup.java
ItemLookupRequest.java
ItemLookupResponse.java
Items.java
ItemSearch.java
ItemSearchRequest.java
ItemSearchResponse.java
LoyaltyPoints.java
Merchant.java
NewReleases.java
NonNegativeIntegerWithUnits.java
ObjectFactory.java
Offer.java
OfferAttributes.java
OfferListing.java
Offers.java
OfferSummary.java
OperationRequest.java
OtherCategoriesSimilarProducts.java
package-info.java
Price.java
Promotion.java
Promotions.java
Property.java
RelatedItem.java
RelatedItems.java
Request.java
SavedForLaterItems.java
SearchBinSet.java
SearchBinSets.java
SearchResultsMap.java
SimilarityLookup.java
SimilarityLookupRequest.java
SimilarityLookupResponse.java
SimilarProducts.java
SimilarViewedProducts.java
StringWithUnits.java
TopItemSet.java
TopSellers.java
Tracks.java
VariationAttribute.java
VariationDimensions.java
Variations.java
VariationSummary.java

(4)Product Advertising APIを呼び出す

Product Advertising APIを呼び出すときに、WS-Securityを利用するためのApache WSS4J用のプロパティファイル(client_sign.properties)と、暗号化を行う際に、(1)で生成した証明書(秘密鍵)へアクセスするためのキーパスワードを設定するコールバッククラス(ClientPasswordCallback)を先に作成する。

Apache WSS4J用のプロパティファイル(client_sign.properties)
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=<キーストアパスワード>
org.apache.ws.security.crypto.merlin.keystore.alias=<キーエイリアス>
org.apache.ws.security.crypto.merlin.keystore.file=<キーストアファイル>

コールバッククラス(ClientPasswordCallback)クラス
import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class ClientPasswordCallback implements CallbackHandler {

    /** 証明書(秘密鍵)にアクセスするためのキーパスワード */
    private static String keyPassword = "<キーパスワード>";

    public void handle(Callback[] callbacks) throws IOException,
            UnsupportedCallbackException {

        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        // キーパスワードの設定
        pc.setPassword(keyPassword);
    }

}

最後にProduct Advertising APIを実行するmain()メソッドを持つクラスを実装する。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.ws.WebServiceRef;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.handler.WSHandlerConstants;

import com.amazon.webservices.awsecommerceservice._2011_08_01.AWSECommerceService;
import com.amazon.webservices.awsecommerceservice._2011_08_01.AWSECommerceServicePortType;
import com.amazon.webservices.awsecommerceservice._2011_08_01.Item;
import com.amazon.webservices.awsecommerceservice._2011_08_01.ItemSearch;
import com.amazon.webservices.awsecommerceservice._2011_08_01.ItemSearchRequest;
import com.amazon.webservices.awsecommerceservice._2011_08_01.ItemSearchResponse;

public class AmazonService {

    @WebServiceRef
    private static AWSECommerceService AWSECommerceService;

    /** WS-Security(シグネチャのキー) */
    private final static String WS_SECURITY_SIGNATURE_KEY_IDENTIFIER = "DirectReference";
    /** WS-Security(シグネチャのキーアルゴリズム) */
    private final static String WS_SECURITY_SIGNATURE_ALGORITHM = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";

    /** AWS アクセスキー識別子 */
    private static String awsAccessKeyId = "xxxxxxxxxxxxxxxxxxxx";
    /** amazonアソシエイトのアカウントID */
    private static String associateTag = "XXXXXXXXXX-nn";
    /** 共通のリクエストパラメータ(Validate) */
    private static String validate = "False";
    /** 共通のリクエストパラメータ(XMLEscaping) */
    private static String xmlEscaping = "Single";

    public static void main(String[] args) throws Exception {

        // サービスのエンドポイントの取得
        AWSECommerceService = new AWSECommerceService();
        AWSECommerceServicePortType endPoint = AWSECommerceService
                .getAWSECommerceServicePortJP();
        Client client = ClientProxy.getClient(endPoint);

        // WS-Securityを使用するためのプロパティ設定
        Map<String, Object> outProps = new HashMap<String, Object>();
        outProps.put(WSHandlerConstants.USER, "<キーエイリアス>");
        outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP
                + " " + WSHandlerConstants.SIGNATURE);
        outProps.put(WSHandlerConstants.SIG_KEY_ID,
                WS_SECURITY_SIGNATURE_KEY_IDENTIFIER);
        outProps.put(WSHandlerConstants.SIG_ALGO,
                WS_SECURITY_SIGNATURE_ALGORITHM);
        outProps.put(WSHandlerConstants.SIG_PROP_FILE, "client_sign.properties");
        outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,
                ClientPasswordCallback.class.getName());
        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
        client.getOutInterceptors().add(wssOut);

        // ItemSearch用のリクエストオブジェクトの生成
        List<ItemSearchRequest> request = new ArrayList<ItemSearchRequest>();
        String marketplaceDomain = null;
        ItemSearchRequest itemSearchRequest = new ItemSearchRequest();
        itemSearchRequest.setKeywords("新居昭乃");
        itemSearchRequest.setAvailability("Available");
        itemSearchRequest.setSearchIndex("Blended");
        itemSearchRequest.getResponseGroup().add("Medium");

        itemSearchRequest.getResponseGroup().add("ItemAttributes");
        request.add(itemSearchRequest);

        ItemSearch itemSearch = new ItemSearch();
        itemSearch.setAssociateTag(associateTag);
        itemSearch.setAWSAccessKeyId(awsAccessKeyId);
        itemSearch.setMarketplaceDomain(marketplaceDomain);
        itemSearch.setXMLEscaping(xmlEscaping);
        itemSearch.setValidate(validate);
        itemSearch.getRequest().add(itemSearchRequest);

        // サービス(itemSearch)の実行
        ItemSearchResponse itemSearchResponse = endPoint.itemSearch(itemSearch);

        // 検索結果の表示
        for (Item item : itemSearchResponse.getItems().get(0).getItem()) {
            System.out.println(item.getItemAttributes().getTitle());
            System.out.println("\t" + item.getDetailPageURL());
        }

    }

}

41~45行目
(1)で生成したサービスクラスから、エンドポイント(ここでは日本サイト)を取得する。
47~60行目
WS-Securityを使用するためのプロパティの設定する。WS-Securityのアクション(WSHandlerConstants.ACTION)には、WSHandlerConstants.TIMESTAMPとWSHandlerConstants.SIGNATUREを指定し、WS-Securityのユーザー(WSHandlerConstants.USER)には、(1)で生成したキーストアの証明書のキーエイリアスを指定し、シグネチャを生成するアルゴリズム(WSHandlerConstants.SIG_ALGO)には「http://www.w3.org/2000/09/xmldsig#rsa-sha1」を指定し、シグネチャーの識別子(WSHandlerConstants.SIG_KEY_ID)にはメッセージに埋め込む方式の「DirectReference」を指定する。
62~80行目
itemSearchを呼び出すのに必要なオブジェクトを初期化・設定する。設定する内容はProduct Advertising APIを参照。
82~83行目
itemSearchの実行
85~89行目
検索結果を表示
これで、WS-Securityを利用する方法で実行が可能。
実際のSOAP呼び出しの際、SOAPメッセージに必要な要素がない場合、だいたい400:Bad Requestとなり、IDなどの認証情報に誤りがある場合403:Forbiddenとなる。