サンプル・プログラムで、Java API for XML Registries (JAXR) の開始方法について説明します。このトピックでは、クラス・ライブラリー、認証およびセキュリティー、内部分類法、およびロギングとメッセージについても取り上げます。
以下のサンプル・プログラムは、 ConnectionFactory インスタンスを取得し、レジストリーへの接続を作成して、 組織をレジストリーに保管する方法を示したものです。
import java.net.PasswordAuthentication; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Properties; import java.util.Set; import javax.xml.registry.BulkResponse; import javax.xml.registry.BusinessLifeCycleManager; import javax.xml.registry.Connection; import javax.xml.registry.ConnectionFactory; import javax.xml.registry.JAXRException; import javax.xml.registry.RegistryService; import javax.xml.registry.infomodel.Key; import javax.xml.registry.infomodel.Organization; public class JAXRSample { public static void main(String[] args) throws JAXRException { //Tell the ConnectionFactory to use the JAXR Provider for UDDI System.setProperty("javax.xml.registry.ConnectionFactoryClass", "com.ibm.xml.registry.uddi.ConnectionFactoryImpl"); ConnectionFactory connectionFactory = ConnectionFactory.newInstance(); //Set the URLs for the UDDI inquiry and publish APIs. //These must be the URLs of the UDDI version 2 APIs. Properties props = new Properties(); props.setProperty("javax.xml.registry.queryManagerURL", "http://localhost:9080/uddisoap/inquiryapi"); props.setProperty("javax.xml.registry.lifeCycleManagerURL", "http://localhost:9080/uddisoap/publishapi"); connectionFactory.setProperties(props); //Create a Connection to the UDDI registry accessible at the above URLs. Connection connection = connectionFactory.createConnection(); //Set the user ID and password used to access the UDDI registry. PasswordAuthentication pa = new PasswordAuthentication("Publisher1", new char[] { 'p', 'a', 's', 's', 'w', 'o', 'r', 'd' }); Set credentials = new HashSet(); credentials.add(pa); connection.setCredentials(credentials); //Get the javax.xml.registry.BusinessLifeCycleManager interface, which contains //methods corresponding to UDDI publish API calls. RegistryService registryService = connection.getRegistryService(); BusinessLifeCycleManager lifeCycleManager = registryService.getBusinessLifeCycleManager(); //Create an Organization (UDDI businessEntity) with name "Organization 1". Organization org = lifeCycleManager.createOrganization("Organization 1"); //Add the Organization to a Collection, ready to be saved in the UDDI registry. Collection orgs = new ArrayList(); orgs.add(org); //Save the Organization in the UDDI registry. BulkResponse bulkResponse = lifeCycleManager.saveOrganizations(orgs); //Obtain the Organization's Key (the UDDI businessEntity's businessKey) from the response. if (bulkResponse.getExceptions() == null) { //1 Organization was saved, so 1 key will be returned in the response collection Collection responses = bulkResponse.getCollection(); Key organizationKey = (Key)responses.iterator().next(); System.out.println("¥nOrganization Key = " + organizationKey.getId()); } } }
JAXR Provider for UDDI の クラス・ライブラリーは、アーカイブ jaxruddi.jar (app_server_root/lib ディレクトリーにあります) に 含まれています。WebSphere Application Server の下で実行されている J2EE アプリケーションから JAXR API を使用する場合、必要なクラスはすべて、 自動的にクラスパス上に置かれます。この環境の外側から JAXR API を使用する場合は、 JAR ファイル bootstrap.jar、jaxruddi.jar、j2ee.jar、soap.jar、および uddi4jv2.jar を、 Java クラスパス上に置く必要があります。これらのファイルはすべて、app_server_root/lib ディレクトリーに あります。
JAXR Provider for UDDI を 使用するには、まず、システム・プロパティー「javax.xml.registry.ConnectionFactoryClass」を 「com.ibm.xml.registry.uddi.ConnectionFactoryImpl」に設定して、 ConnectionFactory 実装クラスの名前を指定する必要があります。これを指定しない場合は、 デフォルトの値「com.sun.xml.registry,common.ConnectionFactoryImpl」が使用されますが、 これは実際には見つかりません。このため、ConnectionFactory.newInstance() メソッドが呼び出されると、 JAXRException が発生します。 JAXR Provider for UDDI は、JNDI 経由の ConnectionFactory の検索には 対応していません。
プロパティー | 説明 |
javax.xml.registry.queryManagerURL | UDDI レジストリーの UDDI バージョン 2 用照会 API の URL。通常は、「http://<hostname>:<port>/uddisoap/inquiryapi」のような形式になります。 このプロパティーは必須です。 |
javax.xml.registry.lifeCycleManagerURL | UDDI レジストリーの UDDI v2 用公開 API の URL。通常は、「http://<hostname>:<port>/uddisoap/publishapi」のような形式になります。 このプロパティーを指定しない場合は、デフォルトで javax.xml.registry.queryManagerURL プロパティーの値が使用されますが、 UDDI レジストリーの URL は、通常は、照会 API および公開 API の URL とは異なるため、 両方のプロパティーを指定することをお勧めします。 |
javax.xml.registry.authenticationMethod | レジストリーによる認証時に使用する認証方式。 値は「UDDI_GET_AUTHTOKEN」または「HTTP_BASIC」のいずれかです。どちらの値も指定しない場合は、 「UDDI_GET_AUTHTOKEN」がデフォルト値になります。 詳しくは、下記の『認証とセキュリティー』のセクションを参照してください。 |
認証
接続プロパティー javax.xml.registry.authenticationMethod は、 UDDI レジストリーによる認証時に使用する方式を JAXR プロバイダーに指示します。 このプロパティーでサポートされている値は「UDDI_GET_AUTHTOKEN」と「HTTP_BASIC」です。 JAXR Provider for UDDI は、 「CLIENT_CERTIFICATE」や「MS_PASSPORT」の認証方式には対応していません。このプロパティーを設定しない場合、 デフォルトの認証方式は「UDDI_GET_AUTHTOKEN」になります。
UDDI_GET_AUTHTOKEN
JAXR プロバイダーは、 レジストリーによる認証に UDDI V2 の get_authToken API を使用します。 get_authToken 呼び出しは、接続のクレデンシャルが設定されたときに JAXR プロバイダーによって自動的に行われ、その呼び出しで戻される UDDI V2 authToken は JAXR プロバイダーによって保管されて、以後の UDDI 公開 API 呼び出しで 使用されます。
HTTP_BASIC
JAXR プロバイダーは、 レジストリーによる認証に HTTP 基本認証を使用します。 これは、グローバル・セキュリティーが有効になっている場合に WebSphere Application Server によってサポートされます。 UDDI V2 get_authToken API 呼び出しは行われませんが、代わりに、 UDDI API 呼び出し (照会でも公開でも) が行われるたびに、 HTTP 基本認証を使用してユーザー名とパスワードが HTTP ヘッダーで送信されます。 UDDI レジストリーが HTTP 基本認証を必要としない場合は、 クレデンシャルは無視されます。
JAXR プロバイダーは、UDDI バージョン 2 SOAP 照会 API および公開 API を使用します。UDDI レジストリー・インターフェースのアクセス制御で説明されているように、これらの API は保護されています。
SSL (Secure Sockets Layer) の使用
java.security.Security.addProvider(new com.ibm.jsse.JSSEProvider());
分類法 | ClassificationScheme 名 (UDDI tModel 名) | ClassificationScheme ID (UDDI バージョン 2 tModelKey) |
NAICS 1997 | ntis-gov:naics:1997 | UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2 |
NAICS 2002 | ntis-gov:naics:2002 | UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2 |
UNSPSC 3.1 | unspsc-org:unspsc:3-1 | UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384 |
UNSPSC 7 | unspsc-org:unspsc | UUID:CD153257-086A-4237-B336-6BDCBDCC6634 |
ISO3166 2003 | ubr-uddi-org:iso-ch:3166-2003 | UUID:4E49A8D6-D5A2-4FC2-93A0-0411D8D19E88 |
UDDI バージョン 3 レジストリーでは、 上記分類法のすべてに対応する tModel が使用できます。JAXR Provider を使用して UDDI バージョン 2 レジストリーに アクセスする場合は、NAICS 1997、UNSPSC 3.1、および ISO3166 に対応する tModel のみが 使用可能になります。
geo#--#World#-- geo#AE#United Arab Emirates#-- geo#AF#Afghanistan#-- geo#AG#Antigua And Barbuda#-- geo#AI#Anguilla#-- geo#AL#Albania#-- geo#AM#Armenia#-- geo#AN#Netherlands Antilles#-- geo#AO#Angola#-- geo#AQ#Antarctica#-- geo#AR#Argentina#-- geo#AR-A#Salta#AR geo#AR-B#Buenos Aires#AR
<taxonomy ID>#<element value>#<element name>#<parent element value>
トークン | 説明 |
<taxonomy ID> | 分類法 ID は、分類法のすべてのエレメントで同じです。 |
<element value> | 概念値 (UDDI keyValue)。 |
<element name> | 概念名 (UDDI keyName)。 |
<parent element value> | これによって、分類法ツリー内のエレメントの親エレメントが定義されます。 データ・ファイル内のすべてのエレメント (ルート・エレメントは除く) について、別の行でそのエレメントの親エレメントを定義する必要があります。ルート・エレメントは、 それ自身を親として定義することで表されます。ルート・エレメントは 1 つだけ必要で、 親のないエレメントがあってはなりません。 |
# | 区切り文字。「#」でなければならないということはなく、 taxonomyConfig.properties ファイルで分類法ごとに定義できます。 |
jaxruddi.jar のルートから、提供された taxonomyConfig.properties ファイルをコピーします。
naics-1997 = UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2, naics-1997-data.txt, # naics-2002 = UUID:1FF729F2-1948-46CF-B660-31EC107F1663, naics-2002-data.txt, # unspsc = UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384, unspsc-data.txt, # unspsc7_data = UUID:CD153257-086A-4237-B336-6BDCBDCC6634, unspsc7-data.txt, # iso3166-2003 = UUID:4E49A8D6-D5A2-4FC2-93A0-0411D8D19E88, iso3166-2003-data.txt,#
<taxonomy ID> = <tModelKey>,<data filename>,<data file delimiter>
トークン | 説明 |
<taxonomy ID> | 各分類法の識別のために、JAXR プロバイダーが内部的に使用します。 対応する分類法データ・ファイルの分類法 ID と同じにする必要はありません。 |
<tModelKey> | 対応する UDDI tModel の tModelKey。 (対応する JAXR ClassificationScheme の ID)。 |
<data filename> | 対応する分類法データ・ファイルの名前。 |
<data file delimiter> | 分類法データ・ファイルで使用される区切り文字。 提供されている内部分類法ではすべて「#」が使用されていますが、 ユーザー提供の内部分類法では別の区切り文字を使用してもかまいません。 |
個々の内部分類法は、 JAXR 接続のたびに一度ずつ、メモリーにロードされます。分類法の ClassificationScheme は、 接続が作成された時点で作成されます。それに関連した UDDI tModel はこのときにレジストリーから取得され、 ClassificationScheme 属性の取り込みに使用されます。 分類法の概念オブジェクト・ツリーが作成されるのは、 ユーザーが最初に ClassificationScheme を要求してからです。同じ内部分類法に対して同じ接続を使用して行われるそれ以後の要求は、 すべて同じオブジェクト・ツリーを戻します。
概念オブジェクト・ツリーの変更
ClassificationScheme および概念オブジェクト・ツリーは、 接続ごとの内部分類法につき 1 つしかないので、ユーザーは、概念ツリーの任意の一部をプログラマチックに変更することはできません。 これは、この分類法に対する、同じ接続を使用する将来のすべての要求が、 変更された (そしておそらく無効な) オブジェクトを戻すことになるためです。 概念ツリーをプログラマチックに変更しても、それに関連した分類法データ・ファイルは変更されません。 ユーザーが、ユーザー定義の内部分類法の値を変更したい場合は、 まず分類法データ・ファイルを変更してから新規接続を作成し、 新規概念ツリーでその変更内容を選出する必要があります。
ClassificationScheme の変更
同様に、 ユーザーは、内部 ClassificationScheme をプログラマチックに変更することはできませんが、 ユーザー定義の内部 ClassificationScheme を変更してから保管する場合は別です。プログラマチックな変更の選出には、 新規接続は必要ありません。
UDDI4J ロギング
JAXR Provider for UDDI は、UDDI レジストリーとの通信に UDDI4J バージョン 2 を 使用します。UDDI4J 独自のロギングは、システム・プロパティー「org.uddi4j.logEnabled」の値を「true」に設定することで有効にすることができます。 これにより、標準エラー・ログに、 すべての UDDI 要求の XML 要求および応答の本文が出力されます。
トレース
エントリー、出口、例外、警告、デバッグの各トレースは、 commons-logging によって提供されます。commons-logging について詳しくは、http://jakarta.apache.org/commons/logging/ を参照してください。 トレースが作成されるのは、JAXR クライアントでトレースが構成されている場合に限られます。 エントリー・トレース、出口トレース、およびデバッグ・トレースでは、 デバッグ・レベルのロギングが使用されます。 例外トレースと警告トレースでは、情報レベルのロギングが使用されます。さらに、 情報レベル・ロギングは個々の UDDI4J 要求が行われる前に提供されます。
標準エラー・ログ・メッセージ
InternalTaxonomyManager、EnumerationManager、 および PostalSchemeManager が System.err に警告メッセージを送信するのは、必ずしも例外とは言えないが、 ユーザーに通知しておく必要があるエラー状態が発生した場合です。 例えば、分類法データ・ファイルに無効な行が含まれている場合、 内部分類法に対応する tModel がレジストリー内に見つからない場合などです。