JAX-WS

LiferayはApache CXFの実装を介して、JAX-WSをサポートしています。アプリケーションは、Liferayインスタンスで定義されたCXFエンドポイントにJAX-WS Webサービスを公開することができます。CXFエンドポイントは、JAX-WS Webサービスがデプロイされてアクセス可能なコンテキストパスです。種類を問わず、JAX-WS Webサービスを公開するには、1つ以上のCXFエンドポイントを定義する必要があります。JAX-WS Webサービスにアクセスするには、Liferayインスタンスでエクステンダーも設定する必要があります。エクステンダーは、サービスがデプロイされる場所の指定と、ハンドラーやプロバイダーなどでサービスを拡張するかどうかの指定を行います。

**SOAPエクステンダー:**これは、JAX-WS Webサービスを公開するために必要です。各SOAPエクステンダーは、1つ以上のCXFエンドポイントにサービスをデプロイでき、JAX-WSハンドラーのセットを使用してサービスを強化できます。

SOAPエクステンダーは、アプリ開発者がOSGiに登録するサービス(提供されているOSGiフィルタに一致するサービス)を追跡し、指定されたCXFエンドポイントの下にそれらのサービスをデプロイするサブシステムです 。たとえば、/soapというCXFエンドポイントを作成する場合、/soapのためにSOAPサービスを公開するSOAPエクステンダーを後で作成できます。もちろん、これは大まかな例に過ぎません。ご希望に合わせて、様々な調整ができます。

CXFエンドポイントとエクステンダーは、プログラムで作成するか、Liferaのコントロールパネルで作成することができます。このチュートリアルでは、その両方の作成方法を紹介し、それからJAX-WS Webサービスを公開する方法を示します。ここでは、以下のトピックをカバーします。

コントロールパネルでのエンドポイントおよびエクステンダーの設定方法

Liferayのコントロールパネルを使用すると、管理者はJAX-WS Webサービスのエンドポイントとエクステンダーを設定することができます。ここで設定にアクセスするには、Liferayインスタンスの管理者である必要があることに注意してください。まず最初に、CXFエンドポイントの作成方法について説明します。

コントロールパネルでCXFエンドポイントを設定するには、まず*[コントロールパネル]* → [設定][システム設定] → *[Web API]に移動します。次に、リストから[CXFエンドポイント]を選択します。既存のCXFエンドポイントがある場合は、ここに表示されます。新しいものを追加するには、[追加]*ボタンをクリックします。表示されるフォームにある以下のフィールドを入力すると、新しいCXFエンドポイントを設定することができます。

Context Path: JAX-WS WebサービスがLiferayサーバーにデプロイされるパス。たとえば、/web-servicesというコンテキストパスを定義する場合、そこにデプロイされているサービスはhttp://your-server:your-port/o/web-servicesで利用できます。

AuthVerifierプロパティ: ここで定義されたプロパティは、すべてAuthVerifierフィルタにそのまま渡されます。詳細については、AuthVerifierのドキュメンテーションを参照してください。

Required Extensions: CXFは通常、デフォルトの拡張機能クラスをロードしますが、場合によっては、それらをオーバーライドしてデフォルトの動作を置き換えることができます。ほとんどの場合、このフィールドは空白のままでかまいません。拡張機能を上書きすることは一般的ではないためです。ここでOSGiフィルタを介してカスタム拡張機能を指定することで、CXFサーブレットを作成して拡張機能をサーブレットに渡す前にそれらの拡張機能がOSGiフレームワークに登録されるまで、Liferayは待機します。

図1:このフォームに入力して、CXFエンドポイントを作成します。

アプリがJAX-WS Webサービスをデプロイするには、SOAPエクステンダーを設定する必要があります。 コントロールパネルでSOAPエクステンダーを設定するには、まず*[コントロールパネル]* → [設定][システム設定] → *[Web API]に移動します。次に、リストから[SOAPエクステンダー]を選択します。既存のSOAPエクステンダーがある場合は、ここに表示されます。新しいものを追加するには、[追加]*ボタンをクリックします。表示されるフォームにある以下のフィールドを入力すると、新しいSOAPエクステンダーを設定することができます。

Context paths: ここで少なくとも1つのCXFエンドポイントを指定します。このエクステンダーの影響を受けるサービスがデプロイされる場所です。前述のCXFエンドポイントの例では、/web-servicesがこの部分にあたります。ここでは、複数のCXFエンドポイントが指定できることに注意してください。

jax.ws.handler.filters: ここで、OSGiフレームワークに登録された特定のサービスを選択するOSGiフィルターのセットを指定できます。選択したサービスは、JAX-WSハンドラーを実装し、jax.ws.service.filtersプロパティで指定されたJAX-WSサービスを強化する必要があります。これらのJAX-WSハンドラーは、このエクステンダーで選択されたそれぞれのサービスに適用されます。

jax.ws.service.filters: ここで、CXFエンドポイントにデプロイされるOSGiフレームワークに登録されたサービスを選択する、OSGiフィルターのセットを指定できます。これらのOSGiサービスは、適切なJAX-WSサービスでなければなりません。

soap.descriptor.builder: JAX-WSアノテーションを使用してSOAPサービスを記述するには、このオプションを空のままにします。別の方法でSOAPサービスを記述するために、ここでcom.liferay.portal.remote.soap.extender.SoapDescriptorBuilderの実装を選択するOSGiフィルターを提供できます。

図2:このフォームを入力して、SOAPエクステンダーを作成します。

次に、エンドポイントとエクステンダーをプログラムで作成する方法について説明します。

プログラムによるエンドポイントおよびエクステンダーの設定方法

エンドポイントやエクステンダーをプログラムで設定するには、Liferayのコンフィギュレーターエクステンダーを使用する必要があります。コンフィギュレーターエクステンダーは、OSGiモジュールがデフォルトの設定値をデプロイする方法を提供します。コンフィギュレーターエクステンダーを使用するモジュールは、モジュール内の設定ファイルの場所を指すConfigurationPathヘッダーを提供する必要があります。たとえば、以下の設定では、ConfigurationPathsrc/main/resources/configurationに設定しています。

Bundle-Name: Liferay Export Import Service JAX-WS
Bundle-SymbolicName: com.liferay.exportimport.service.jaxws
Bundle-Version: 1.0.0
Liferay-Configuration-Path: /configuration
Include-Resource: configuration=src/main/resources/configuration
Liferay-Releng-Module-Group-Description:
Liferay-Releng-Module-Group-Title: Data Management

Liferayに固有のBnd命令には、競合を避けるために接頭辞のLiferayが付いていることに注意してください。

OSGiのConfigurationAdminには、「シングル」と「ファクトリー」の2種類の設定タイプがあります。ファクトリー設定は、ファクトリー名ごとに複数の設定インスタンスを持つことができます。Liferay DXPは、工場出荷時の設定を使用しているため、工場出荷時の設定のデフォルト値を*.propertiesファイルで提供する必要があります。 このプロパティファイルでは、PID(永続的な識別子)の末尾に接尾辞を使用してから設定を提供します。たとえば、以下のコードはPIDに接尾辞の-stagingPIDを使用して、コンテキストパスの/staging-wsにCXFエンドポイントを作成します。

com.liferay.portal.remote.cxf.common.configuration.CXFEndpointPublisherConfiguration-staging.properties:

contextPath=/staging-ws

以下のコードはもう一つの例で、ここではPIDに接尾辞の-stagingjaxwsPIDを使用して、コンテキストパスの/staging-wsにSOAPエクステンダーを作成します。このコードには、設定フィールドのjaxWsHandlerFilterStringsおよびjaxWsServiceFilterStringsの設定も含まれます。

com.liferay.portal.remote.soap.extender.configuration.SoapExtenderConfiguration-stagingjaxws.properties:

contextPaths=/staging-ws
jaxWsHandlerFilterStrings=(staging.jax.ws.handler=true)
jaxWsServiceFilterStrings=(staging.jax.ws.service=true)

次は、設定クラスでこれらの設定フィールドを使用する必要があります。例えば、以下のSoapExtenderConfigurationインターフェイスには、設定フィールドのcontextPathsjaxWsHandlerFilterStrings、およびjaxWsServiceFilterStringsが含まれています。

@ExtendedObjectClassDefinition(
category = "foundation", factoryInstanceLabelAttribute = "contextPaths"
)
@Meta.OCD(
factory = true,
id = "com.liferay.portal.remote.soap.extender.configuration.SoapExtenderConfiguration",
localization = "content/Language", name = "soap.extender.configuration.name"
)
public interface SoapExtenderConfiguration {

@Meta.AD(required = false)
public String[] contextPaths();

@Meta.AD(name = "jax.ws.handler.filters", required = false)
public String[] jaxWsHandlerFilterStrings();

@Meta.AD(name = "jax.ws.service.filters", required = false)
public String[] jaxWsServiceFilterStrings();

@Meta.AD(name = "soap.descriptor.builder", required = false)
public String soapDescriptorBuilderFilter();

}

次に、JAX-WS Webサービスを公開する方法について説明します。

JAX-WS Webサービスの公開

モジュールでSOAPを介してJAX-WS Webサービスを公開するには、クラスとそのメソッドに標準のJAX-WSアノテーションを付けて、OSGiフレームワークにサービスとして登録します。たとえば、以下のクラスでは、クラスに対して@WebServiceアノテーションを意使用しており、メソッドに対しては@WebMethodを使用しています。また、OSGiの@Componentアノテーションで、jaxwsプロパティをtrueに設定する必要もあります。

import javax.jws.WebMethod;
import javax.jws.WebService;

import org.osgi.service.component.annotations.Component;

@Component(
immediate = true, property = "jaxws=true", service = Calculator.class
)
@WebService
public class Calculator {

@WebMethod
public int divide(int a, int b) {
return a / b;
}

@WebMethod
public int multiply(int a, int b) {
return a * b;
}

@WebMethod
public int subtract(int a, int b) {
return a - b;
}

@WebMethod
public int sum(int a, int b) {
return a + b;
}

}

プロジェクトへの依存関係としてorg.osgi.coreおよびorg.osgi.service.component.annotationsも含めるようにしてください。

« JAX-RS検索 »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています