JAX-WS 2.1をJDK 1.6で利用する方法 on NetBeans

NetBeans IDE 6.0.1を利用して、Webサービスのクライアントを開発していた際に発生した問題の解決方法。


NetBeansJava PlatformとしてJDK 1.6(実際には1.6.0_04を利用)を利用した場合、NetBeansは最新のJAX-WS 2.1をバンドルしているものの、JDK 1.6自体が1つ前のバージョンのJAX-WS 2.0をバンドルしているため、実行時に以下のようなエラーが発生してしまう。
JDK 6 Update 4からは最新のJAX-WS 2.1とJAXB 2.1が含まれている模様。
参照:http://weblogs.java.net/blog/ramapulavarthi/archive/2008/01/jaxws_21_and_ja.html

javax.xml.ws.WebServiceException:
Provider com.sun.xml.ws.spi.ProviderImpl not found

上記エラーであるが、以下のような方法で強制的にJAX-WS 2.1を使うように指定することで回避可能である。

  1. プロジェクトを右クリックし[Properties]メニューを選択
  2. プロジェクトのプロパティで[Libraries]のカテゴリを選択
  3. [Run]タブを選択し[Add Library ...]ボタンを押す [Run]タブでは無く[Compile]タブの方が良さそう
  4. Add Libraryの画面で"JAX-WS 2.1"、"JAXB 2.1"を選択し、Run-time Librariesに追加する
  5. [OK]ボタンを押してプロジェクトのプロパティ画面を閉じる


【備考】
java.netではEndorsed directoryを使った本問題の解決方法が示されているのだが、上手く行かなかったため上記の対応を取った。
参照:https://jax-ws.dev.java.net/guide/Using_JAX_WS_2_1_with_JavaSE6.html