Menu Close

27.3. サービスプロバイダーの実装

実装コードの生成

コードジェネレーターの -impl フラグを使用して、サービスプロバイダーをビルドするために使用される実装クラスを生成します。

注記

サービスのコントラクトに XML スキーマで定義されたカスタム型が含まれる場合は、型のクラスが生成され、利用できるようにする必要があります。

コードジェネレーターの使用に関する詳細は、「cxf-codegen-plugin」を参照してください。

生成されるコード

実装コードは 2 つのファイルで構成されています。

  • portTypeName.java: サービスのサービスインターフェース (SEI)
  • portTypeNameImpl.java: サービスによって定義された操作を実装するために使用するクラス

操作のロジックの実装

サービスの操作にビジネスロジックを指定するには、portTypeNameImpl.java のスタブメソッドを完了します。通常は、標準の Java を使用してビジネスロジックを実装します。サービスがカスタムの XML スキーマ型を使用する場合は、型ごとに生成されたクラスを使用して操作する必要があります。一部の高度な機能にアクセスするために使用できる Apache CXF 固有の API も用意されています。

たとえば、例26.1「HelloWorld WSDL コントラクト」で定義されたサービスの実装クラスは 例27.2「Greeter サービスの実装」のようになります。プログラマーは、太字で強調表示されているコード部分のみを挿入する必要があります。

例27.2 Greeter サービスの実装

package demo.hw.server;

import org.apache.hello_world_soap_http.Greeter;

@javax.jws.WebService(portName = "SoapPort", serviceName = "SOAPService",
                      targetNamespace = "http://apache.org/hello_world_soap_http",
                      endpointInterface = "org.apache.hello_world_soap_http.Greeter")

public class GreeterImpl implements Greeter {

    public String greetMe(String me) {
       System.out.println("Executing operation greetMe"); System.out.println("Message received: " + me + "\n"); return "Hello " + me;
    }

    public void greetMeOneWay(String me) {
       System.out.println("Executing operation greetMeOneWay\n"); System.out.println("Hello there " + me);
    }

    public String sayHi() {
       System.out.println("Executing operation sayHi\n"); return "Bonjour";
    }

    public void pingMe() throws PingMeFault {
       FaultDetail faultDetail = new FaultDetail(); faultDetail.setMajor((short)2); faultDetail.setMinor((short)1); System.out.println("Executing operation pingMe, throwing PingMeFault exception\n"); throw new PingMeFault("PingMeFault raised by server", faultDetail);
    }
}