WSIF を使用した、JNDI 参照の Web サービスへのバインド
Web Services Invocation Framework (WSIF) を使用して、参照を Web サービスにバインドし、その後、JNDI を使用してその参照を検索することができます。
このタスクについて
Web サービスには、そのサービスの Web サービス記述言語 (WSDL) 文書に指定されている情報を使用してアクセスします。 サービス用の WSDL 文書の場所は不明だが、その文書が UDDI レジスト リーに登録されていることがわかっている場合は、レジストリーでその文書を検索します。Java™ プログラムが Java オブジェクトおよびリソースにアクセスする方法もこれと類似していますが、その場合は JNDI インターフェースを使用します。
次のステップのコード・フラグメントは、WSIF を使用して参照を Web サービスにバインドし、その後 JNDI を使用してその参照を検索する方法を示しています。
手順
- Web サービスの引数値を指定します。
Web サービスは、WSIF では org.apache.wsif.naming.WSIFServiceRef クラスのインスタンスによって表されます。この単純な参照可能なオブジェクトのコンストラクターは次のとおりです。
public WSIFServiceRef( String WSDL, String sNS, String sName, String ptNS, String ptName) { [...] }
この例では、次のようになっています。- WSDL は、サービスの定義を含む WSDL ファイルのロケーションです。
- sNS は、サービス定義の完全な名前空間です (WSDL ファイルでサービスが 1 つしか定義されていない場合は、null を指定できます)。
- sName は、サービス定義のローカル名です (WSDL ファイルでサービスが 1 つしか定義されていない場合は、null を指定できます)。
- ptNS は、使用するサービス内のポート・タイプの完全な名前空間です (サービスで使用可能なポート・タイプが 1 つだけの場合は、null を指定できます)。
- ptName は、ポート・タイプのローカル名です (サービスで使用可能なポート・タイプが 1 つだけの場合は、null を指定できます)。
例えば、Web サービスの WSDL ファイルが Web アドレス http://myServer/WSDL/Example.WSDL から入手可能であり、そこに次のサービス定義およびポート・タイプ定義が含まれていると仮定します。
この場合、WSIFServiceRef クラスには次の引数値を指定できます。<definitions targetNamespace="http://hostname/namespace/example" xmlns:abc="http://hostname/namespace/abc" [...] <portType name="ExamplePT"> <operation name="exampleOp"> <input name="exampleInput" message="tns:ExampleInputMsg"/> </operation> </portType> [...] <service name="abc:ExampleService"> [...] </service> [...] </definitions>
- WSDL は http://myServer/WSDL/Example.WSDL です。
- sNS は http://hostname/namespace/abc です。
- sName は ExampleService です。
- ptNS は http://hostname/namespace/example です。
- ptName は ExamplePT です。
- JNDI を使用してサービスをバインドします。
JNDI を使用してネーミング・ディレクトリーのサービス参照をバインドするには、 以下のように、WebSphere® Application Server で com.ibm.websphere.naming.JndiHelper クラスを使用することができます。
[...] import com.ibm.websphere.naming.JndiHelper; import org.apache.wsif.naming.*; [...] try { Context startingContext = new InitialContext(); WSIFServiceRef ref = new WSIFServiceRef("http://myServer/WSDL/Example.WSDL", "http://hostname/namespace/abc" "ExampleService", "http://hostname/namespace/example", "ExamplePT"); JndiHelper.recursiveRebind(startingContext, "myContext/mySubContext/myServiceRef", ref); } catch (NamingException e) { // Handle error. } [...]
- JNDI を使用してサービスを検索します。
次のコード・フラグメントは、JNDI を使用したサービスの検索を示しています。
[...] try { [...] InitialContext ic = new InitialContext(); WSIFService myService = (WSIFService) ic.lookup("myContext/mySubContext/myServiceRef"); [...] } catch (NamingException e) { // Handle error. } [...]
関連概念:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twsf_jndi
ファイル名:twsf_jndi.html