2009年11月14日土曜日

Apache CXF 2.2.4/Tomcat v6.0/Eclipse 3.5

Apache CXF を、Eclipse の WTP から Tomcat v6.0 で動かしてみる。 ■ Eclipse の準備
  • SOA Tools Platform プラグインをインストールしておく。update site は "http://download.eclipse.org/releases/galileo"。
  • Servers ビューで、Tomcat v6.0 サーバを構成しておく
  • [Preference]から[Web Services]→[CXF 2.0 Preferences]の[CXF Runtime]タブで、CXF Home に CXF のインストールディレクトリを指定。
  • 続けて、[Server and Runtime] で Tomcat v6.0 とApache CXF 2.xを指定
■ プロジェクトと WSDL ファイルの作成
  • Dynamic Web Project を作成する。(ここでは プロジェクト名:cxf-trial1とした)
  • Project Facets で CXF 2.x Web Services が指定されていることを確認
  • 新規ソースフォルダ resources を作成する。
  • resources 下に greeting.wsdl を作成する。
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions name="greeting"
       targetNamespace="http://mycompany.com/greeting/"
       xmlns:tns="http://mycompany.com/greeting/"
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
       <wsdl:types>
          <xsd:schema targetNamespace="http://mycompany.com/greeting/">
             <xsd:element name="greet">
                <xsd:complexType>
                   <xsd:sequence>
                      <xsd:element name="username" type="xsd:string" />
                   </xsd:sequence>
                </xsd:complexType>
             </xsd:element>
             <xsd:element name="greeting-response">
                <xsd:complexType>
                   <xsd:sequence>
                      <xsd:element name="return" type="xsd:string" />
                   </xsd:sequence>
                </xsd:complexType>
             </xsd:element>
          </xsd:schema>
       </wsdl:types>
       <wsdl:message name="request">
          <wsdl:part name="parameters" element="tns:greet" />
       </wsdl:message>
       <wsdl:message name="response">
          <wsdl:part name="parameters" element="tns:greeting-response" />
       </wsdl:message>
       <wsdl:portType name="Greeting">
          <wsdl:operation name="greet">
             <wsdl:input message="tns:request"/>
             <wsdl:output message="tns:response"/>
          </wsdl:operation>
       </wsdl:portType>
       <wsdl:binding name="GreetingSoapBinding" type="tns:Greeting">
          <soap:binding style="document"
             transport="http://schemas.xmlsoap.org/soap/http" />
          <wsdl:operation name="greet">
             <wsdl:input>
                <soap:body use="literal" />
             </wsdl:input>
             <wsdl:output>
                <soap:body use="literal" />
             </wsdl:output>
          </wsdl:operation>
       </wsdl:binding>
       <wsdl:service name="GreetingService">
          <wsdl:port name="GreetingPort" binding="tns:GreetingSoapBinding">
             <soap:address location="http://localhost:8080/GreetingService" />
          </wsdl:port>
       </wsdl:service>
    </wsdl:definitions>
■ Web サービスのスケルトンの作成
  • greeting.wsdl のコンテキストメニューから新規 Web Service を作成(Web Service Runtime に、CXF 2.x が設定されている事を確認)
  • http://localhost:8080/cxf-trial/services/ で Greeting の WSDL へのリンクが表示され、これを辿ると WSDL が表示される事を確認。
  • Web Service Explorer から greet を実行してみると、与えた文字列に関係なく、自動生成コードにより固定文字列(_return-1938145346みたいな)が返される事を確認。
■ Web サービスのスケルトンの実装 GreetingImpl.greet()を書き換える
   public java.lang.String greet(java.lang.String username) { 
      return String.format("Hello, %s!", username);
   }
WTP なので、変更したら勝手に 再発行される。Web Service Explorer で 文字列 "World" を与えて greet を実行してみると、"Hello, World!" が返される事を確認。 これで、他の CXF の機能(WS-Security とか)を試す準備ができた。

0 件のコメント:

コメントを投稿