5

JDK6 にバンドルされている JAX-WS 実装を使用して、追加のライブラリーなしで Web サービス サーバーを提供できます。JVM は、指定されたポート上の WS サーバーで開始されます。

https://www.oracle.com/technical-resources/articles/javase/jax-ws-2.html

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/

私が持っている質問は、これがプロジェクト Metro とどう違うのですか? 最終的な目標が tomcat 内で Web サービスをホストすることである場合、バンドルされた機能を引き続き使用して、このバンドルされた ws サーバーにリダイレクトできますか、それともメトロ サーブレットをデプロイする方がよいでしょうか?

4

2 に答える 2

17

さて、Metro について最初に知っておくべきことは、Metro がさまざまな WS 関連プロジェクトの包括的なプロジェクトであるということです。JAX-WS、JAXB、WSIT、JAX-WS-Commons など

これらの各コンポーネントには、API (仕様) と参照実装 (RI) と呼ばれる実装部分の 2 つの部分があります。仕様は「javax.xml.ws」、「javax.xml.bind」などで定義され、RI は「com.sun.xxx」パッケージに含まれます。

現在、JDK 6 アップデート 4 あたりのどこかで、sun/oracle はこれらの API と RI を JDK 自体にバンドルし始め、JDK の更新でこれらを更新し続けました。

最後の JDK 6 update31 の時点で、JDK には次のバージョンの JAXWS と JAXB API、および RI が含まれています。

JDK6 u31 - JAXB API @ 2.1 & RI @ 2.1.10、JAXWS API @ 2.1 および RI @ 2.1.6

http://jaxb.java.netおよびhttp://jax-ws.java.netページに移動し、2.1.x の下の最後のリリースを見ると、JAXB RI が 2.1.13 であることがわかります。 JAXWS RI は 2.1.7 です。つまり、最新の JDK 6 アップデートにバンドルされている 2.1 スペースの RI 実装は、Metro でリリースされたバージョンよりも数バージョン遅れています。したがって、最新の 2.1 jar を使用するには、API + RI jar をクラスパスにコピーするだけです ( http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html#Running_on_top_of_JDK_6を参照) 。

さらにややこしいことに、傘下のプロジェクトである Metro には独自のバージョン番号があり、現在は 1.5、2.0、2.0.1、2.1、2.1.1、2.2 です。

Metro 1.5 は、2.1 仕様とその仕様の最新の RI をバンドルした最後のビルドです。つまり、Metro 1.5 には、JAXWS および JAXB API @ 2.1 と JAXWS RI @ 2.1.7 および JAXB RI @ 2.1.13 が含まれています。

Metro 2.0 以降では、JAXB および JAXWS API v2.2 と、リリース データの最新の RI がバンドルされています。たとえば、最新の METRO リリース 2.2 には、JAXB RI 2.2.5 と JAXWS RI 2.2.6 がバンドルされています。

しかし、JDK 6 には JAXWS および JAXB (API + RI) 用の v2.1 がバンドルされており、クラスパスで JAXWS 、JAXB v2.2 jar を使用するだけでは機能しません。ここhttp://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html#Running_on_top_of_JDK_6で説明されているように、承認された jar メカニズムを使用する必要があります。

そのため、Metro リリース 2.0 以降では、jax-ws-api.jar ファイルと jaxb-api.jar ファイルを $JAVA_HOME/jre/lib/endorsed の下にコピーするか、-Djava.endorsed.dirs システムを使用する必要があります。財産。

さらに面白いことに、Metro は jax-ws や jaxb プロジェクト (その他) を含む包括的なプロジェクトではありませんが、これらのプロジェクトから uber jar も作成します。

たとえば、metro の webservices-api.jar には jaxws-api.jar 、 jaxb-api.jar (RI) + WSIT、jax-ws-commons などの他の子プロジェクトの API が含まれています。

また、webservices-rt.jar には、jaxws-rt.jar、jaxb-rt.jar、および WSIT、jax-ws-commons などの他の子プロジェクトの RT jar が含まれています。

要約すると-

JAXWS/JAXB v2.1 仕様に基づいて WS を開発する場合は、単純に JDK 6 (u04 以降の更新) を使用してください。2.1 仕様の最新の API + RI バージョンを確実に使用したい場合は、単に jaxws および jaxb から最新の 2.1.x リリース jar を使用してください。つまり、クラスパスで jax-ws 2.1.7 と jaxb 2.1.13 を使用します。 . ]

最新の JAXWS/JAXB v2.2 仕様に対して WS を開発する場合は、jax-ws v2.2.6 および jaxb ver 2.2.5 jar を使用する必要があります [または、Metro 2.2 の webservices-api. jar および webservices-rt.jar は jaxws/jaxb/wsit をバンドルしているため..] ただし、jdk に含まれる jaxws/jaxb v2.1 jar をオーバーライドするには、上記の承認された jar メカニズムを使用する必要があります。

私の推奨事項 - v2.1 で問題ない場合は、Metro 1.5 jar (webservices-api、webservices-rt) を使用してください。v2.2 が必要な場合は、Metro 2.2 jar (webservices-api、webservices-rt) を使用し、承認されたディレクトリに webservices-api.jar を配置してください。

fastinfosets、Mtom などを JDK バンドル jar として使用する場合、または jaxws-ri.jar と jaxb- ri.jar はそれらの機能を提供しません。

このかなり長いメールが、いくつかの問題を解決するのに役立つことを願っています.

于 2012-03-22T15:11:00.620 に答える
1

私の知る限り、JAX-WS は、JDK6 または Metro 実装のいずれかによって実装する必要があるテンプレートにすぎません。

Metro は、Glassfish Application Server に同梱されている標準実装です。ここ を参照してください

したがって、違いがあってはなりません。

于 2012-03-08T21:56:44.860 に答える