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「グリーターサービスの実装」 のように見えるかもしれません。太字で強調表示されているコード部分のみをプログラマーが挿入する必要があります。

例27.2 グリーターサービスの実装

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