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;
   }
}