プロビジョニングサービスの実装は、JAX-WSフレームワークを利用するのが最も簡単です。この方法を推奨します。アプリケーションサービス機能はJAX-WSフレームワークを利用してWebサービスにアクセスするためのJavaインターフェースを.jarファイルとして同梱しています。Javaコードを書くときにこの.jarファイルをインクルードすれば、Webサービスのクライアント機能およびサーバー機能を実装できます。この場合、WSDLからコードを生成する必要ありません。
Java EE環境では、Webサービスのクライアント機能およびサーバー機能の双方を配備できます。
Webサービスのクライアント機能の実装のため、JAX-WSはWSDLで定義したWebサービスを直接呼び出すAPIと、インターフェースのプロキシの実装を取得するAPIを提供しています。
Webサービスのクライアントを作るには、以下のようなコードを利用します。
final URL wsdlLocation = ... final javax.xml.namespace.QName serviceName = new QName( "http://bss.fujitsu.com/xsd/v1.1", "SessionService"); final javax.xml.ws.Service service = Service.create(wsdlLocation, serviceName); final SessionService sessionService = service.getPort(SessionService.class); java.util.Map<String, Object> requestContext = ((BindingProvider)sessionService).getRequestContext(); requestContext.put(BindingProvider.USERNAME_PROPERTY, username); requestContext.put(BindingProvider.PASSWORD_PROPERTY, password); // 以上により、サービスがローカルに実装されている場合と全く同じように、サービスに直接アクセスできます。 sessionService.resolveUserToken(…);
JAX-WSフレームワークでWebサービスのサーバー機能を提供するということは、サービスインターフェースを実装し、これを公開するためのアノテーションを付けることを意味します。
テクニカルサービスがJava-EEに準拠したアプリケーションサーバーに配備されている場合、プロビジョニングサービスはアノテーション付のBeanとして配備できます。このBeanをJ2EEアプリケーションとして実装する場合は、ステートレスBeanとして実装できます。あるいは、Webアプリケーションの一部として配備する場合は、標準Javaオブジェクトとして実装できます。いずれの場合も、必要なアノテーションは、サービスのインターフェース定義を参照するjavax.jws.WebServiceです。
以下のコードは、プロビジョニングサービスの実装の例です。
@WebService(serviceName = "ProvisioningService", targetNamespace = "http://bss.fujitsu.com/xsd/v1.1", endpointInterface = "com.fujitsu.bss.provisioning.intf.ProvisioningService") public class MyProvisioningServiceImpl implements ProvisioningService { //... }
ターゲットの名前空間は、インターフェースに定義されているものと完全に同一にします。
エンドポイントインターフェース属性はWebサービスを定義しているインターフェースを参照しています。これによって、実装クラスがそれぞれのJavaメソッドの実装を提供できるようになります。Webサービスに関連するアノテーションは、すべてこのインターフェースから継承されます。
テクニカルサービスがJava-EEに準拠したアプリケーションサーバーには配備されないJavaアプリケーションである場合には、JAX-WSが提供しているAPIを使用してWebサービスを公開することができます。以下にコード例を示します。
import javax.xml.ws.Endpoint; public static void main(String[] args) { Endpoint.publish( "http://www.example.com/MyService/provisioningServices", new MyProvisioningServiceImpl()); }
JAX-WSフレームワークを使用する場合、WebサービスのWSDLファイルは、公開したWebサービスのURLにクエリ"?wsdl"を付加したURLで自動的に公開されます。テクニカルサービス定義には、このURLを指定してください。