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の場合、上記サイトに書かれているように
具体的には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)
上記の原因はTomcatがjsf-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で利用していたために出ていた問題は発生しなくなり、スムーズにチュートリアルを進める事が出来た。