NetBeans IDEを使ってJAX-WS Webサービスを開発

NetBeans IDEチュートリアルhttp://www.netbeans.org/kb/55/websvc-jax-ws_ja.html」を参考に、JAX-WS Webサービスを作成してみた際に、つまづいたこと等をメモしておく。
なお、チュートリアルではSun Java System Application ServeとTomcat Web サーバーのどちらかを利用するようになっているが、私は最初からバンドルされていたTomcatを使用した。


JAX-WS 2.1をJDK 1.6で利用するために
 チュートリアルの「Web サービスの配備とテスト」を実施した際に、以下のようなエラーが発生。

C:\WebServiceTest\CalculatorWSApplication\nbproject\build-impl.xml:546:
Deployment error:

 Tomcatのログを見てみると、以下のようなメッセージが出力されていた。

java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap
classloader, but this RI (from jar:file:/C:/WebServiceTest/
CalculatorWSApplication/build/web/WEB-INF/lib/jaxb-impl.jar!
/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.1 API.
Use the endorsed directory mechanism to place jaxb-api.jar in the
bootstrap classloader.
(See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)

 これはJDK 1.6には標準でJAX-WS 2.0がバンドルされているためで、JAX-WS 2.1を使うためにはEndorsed Standards Override Mechanism等を利用する必要がある。ただTomcatの場合、上記サイトに書かれているように\lib\endorsed配下にJAX-WS 2.1のjarファイルを置くという方法では上手く行かず、以下のような方法を取る必要があった。
 具体的にはWindowsのシステム環境変数に以下を追加する。
 変数名:JAVA_ENDORSED_DIRS
 値:<NetBeansインストールディレクトリ>\ide7\modules\ext\jaxws21\api


・Clean Projectでエラーが出る原因
 NetBeans IDEのメニューでプロジェクトのCleanを実行すると、以下のようなエラーが出る場合がある。

C:\WebServiceTest\CalculatorWSApplication\nbproject\build-impl.xml:782:
Unable to delete file C:\WebServiceTest\CalculatorWSApplication\build
\web\WEB-INF\lib\jsf-impl.jar
BUILD FAILED (total time: 1 second)

 上記の原因はTomcatjsf-impl.jarを使用している事が原因のようで、バンドルしているTomcatを一旦停止すると、プロジェクトのCleanが実行出来るようになる。


【追記】
 結局、「Web サービスの消費」の所で「クライアント 1: Java SE アプリケーションの Java クラス」の作成を実施したのだが、コンパイルは通るものの実行時に「javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi ...」というエラーが出て上手く動作しなかった。
 どうもJAX-WS 2.1をJDK 1.6で利用している事が問題のようなのだが、解決策が見つからずギブアップ…(後日また原因は調べてみることにする)


 とりあえずJDK 5.0 Update 12 + NetBeans IDE 5.5.1をダウンロードしてきて、JDK 1.5ベースでチュートリアルを実施してみることに。そうすると、JAX-WS 2.1をJDK 1.6で利用していたために出ていた問題は発生しなくなり、スムーズにチュートリアルを進める事が出来た。