Show Table of Contents
9.20.2. Top-Down (wsconsume を使用)
top-down の開発はサービスの抽象規定で開始し、 これは WSDL ファイルおよび 0 またはそれ以上のスキーマファイルを含みます。 wsconsume ツールは次にこの規定を消費するため使用され、 それを定義するアノテーションが付けられた Java クラス (およびオプションでソース) を生成します。
注記
wsconsume は Unix システム上の symlinks との動作には問題があるようです。
bottom-up の例から WSDL ファイルを使用して、 このサービスを厳守する新しい Java 実装を生成することが可能です。 「-k」オプションは単にクラスを提供するだけではなく、 生成される Java ソースファイルを維持するために wsconsume に渡されます。
$ wsconsume -k EchoService.wsdl echo/Echo.java echo/EchoResponse.java echo/EchoService.java echo/Echo_Type.java echo/ObjectFactory.java echo/package-info.java echo/Echo.java echo/EchoResponse.java echo/EchoService.java echo/Echo_Type.java echo/ObjectFactory.java echo/package-info.java
次の表では各生成ファイルの目的を示します。
ファイル
|
目的
|
Echo.java
|
Service Endpoint Interface
|
Echo_Type.java
|
要求メッセージに対するラッパー bean
|
EchoResponse.java
|
レスポンスメッセージに対するラッパー bean
|
ObjectFactory.java
|
JAXB XML レジストリ
|
package-info.java
|
JAXB パッケージアノテーションのホルダー
|
EchoService.java
|
JAX-WS クライアントによってのみ使用される
|
Service Endpoint Interface をよく見てみると、 同じコントラクトに対して評価するのに、 bottom-up の例での手動で記述されたクラスにあるアノテーションより明示的であるのに気づくはずです。
@WebService(name = "Echo", targetNamespace = "http://echo/") public interface Echo { @WebMethod @WebResult(targetNamespace = "") @RequestWrapper(localName = "echo", targetNamespace = "http://echo/", className = "echo.Echo_Type") @ResponseWrapper(localName = "echoResponse", targetNamespace = "http://echo/", className = "echo.EchoResponse") public String echo(@WebParam(name = "arg0", targetNamespace = "") String arg0); }
ここにないのは (パッケージング以外) その実装クラスのみで、 上記のインターフェースを使って記述することができます。
package echo; @javax.jws.WebService(endpointInterface="echo.Echo") public class EchoImpl implements Echo { public String echo(String arg0) { return arg0; } }