UDDI API  目次

UDDI(Universal Description Discovery and Integration)は、Webサービス・プロバイダ、WebサービスおよびそれらのWebサービスの技術的な特徴の記述および検索がサポートされているWebサービスのセットです。

UDDI APIセットは、一般的なユースケースによって2組に分けることができます。Inquiry APIセットは、UDDIレジストリ内のエンティティに関する詳細を検索および取得する場合に使用します。たとえば、指定したWebサービスのエンドポイントを検索する場合に使用します。Publication APIセットは、UDDIレジストリ内の情報を公開および更新する場合に使用します。

UDDI APIの使用上の原則  目次

この項では、Oracle Service Registry APIの使用方法について説明します。例は、UDDI Version 3仕様に基づいています。

Inquiry APIを使用するには、次の手順を実行します。この部分のすべてのコードは、例1を参照してください。

  1. スタブからAPIの実装を取得します。

    String url = "http://localhost:8888/registry/uddi/inquiry";
    UDDI_Inquiry_PortType inquiry = UDDIInquiryStub.getInstance(url);

  2. 照会パラメータを収集します。

    String serviceKey = "uddi:systinet.com:demo:hr:employeesList";
    String tModelKey = "uddi:systinet.com:demo:employeeList:binding";
    Find_binding find_binding = new Find_binding();
    find_binding.setServiceKey(serviceKey);
    find_binding.addTModelKey(tModelKey);
    find_binding.setMaxRows(new Integer(10));

  3. 照会メソッドをコールします。

    BindingDetail bindingDetail = inquiry.find_binding(find_binding);

  4. 照会の結果を処理します。

    ListDescription listDescription = bindingDetail.getListDescription();
    if (listDescription != null) {
        int includeCount = listDescription.getIncludeCount();
        int actualCount = listDescription.getActualCount();
        int listHead = listDescription.getListHead();
        System.out.println("Displaying " + includeCount + " of " +
            actualCount+ ", starting at position " + listHead);
    }

注意注意

java.lang.reflect.UndeclaredThrowableExceptionという例外を取得した場合は、Oracle Service Registryが実行されているかどうかをチェックします。

Publishing APIを使用するには、次の手順を実行します。この部分のすべてのコードは、例2を参照してください。

  1. セキュリティ・スタブのAPIを取得します。

    String securityUrl = "http://localhost:8888/registry/uddi/security";
    UDDI_Security_PortType security = UDDISecurityStub.getInstance(securityUrl);
    String publishingUrl = "http://localhost:8888/registry/uddi/publishing";
    UDDI_Publication_PortType publishing = UDDIPublishStub.getInstance(publishingUrl);

  2. 認証トークンを取得します。

    AuthToken authToken = security.get_authToken(new Get_authToken(userName, password));
    String authInfo = authToken.getAuthInfo();

  3. saveオブジェクトを作成します。

    String businessKey = "uddi:systinet.com:demo:it";
    String serviceKey = ""; // serviceKey is optional
    int count = 1;
    String[] serviceNames = new String[count];
    String[] languageCodes = new String[count];
    languageCodes[0] = null; // can set an array of language codes
    serviceNames[0] = "Requests Service"; //service name
    String serviceDescription = "Saved by Example"; //service description
    BusinessService businessService = new BusinessService();
    businessService.setBusinessKey(businessKey);
    if (serviceKey != null && serviceKey.length() > 0)
        businessService.setServiceKey(serviceKey);
    businessService.addName(new Name(serviceNames[0], languageCodes[0]));
    businessService.addDescription(new Description(serviceDescription));
    Save_service save = new Save_service();
    save.addBusinessService(businessService);
    save.setAuthInfo(authInfo);

  4. 公開メソッドをコールします。

    ServiceDetail serviceDetail = publishing.save_service(save);

  5. 公開の結果を処理します。

    BusinessServiceArrayList
         businessServiceArrayList = serviceDetail.getBusinessServiceArrayList();
    int position = 1;
    for (Iterator iterator = businessServiceArrayList.iterator();
      iterator.hasNext();) {
        BusinessService service = (BusinessService) iterator.next();
        System.out.println("Service " + position + " : " + service.getServiceKey());
        System.out.println(service.toXML());
        position++;
    } 

  6. 認証トークンを廃棄します。

    security.discard_authToken(new Discard_authToken(authInfo));

例1 FindBinding v3

package example.inquiry;

import org.systinet.uddi.client.v3.UDDIInquiryStub;
import org.systinet.uddi.client.v3.UDDI_Inquiry_PortType;
import org.systinet.uddi.client.v3.struct.*;

import java.util.Iterator;

public class PrincipleFindBinding {

    public static void main(String args[]) throws Exception {

        //1. Get API implementation from stub
        String url = "http://localhost:8888/registry/uddi/inquiry";
        System.out.print("Using Inquiry at url " + url + " ..");
        UDDI_Inquiry_PortType inquiry = UDDIInquiryStub.getInstance(url);
        System.out.println(" done");

        //2. Collect inquiry parameters
        String serviceKey = "uddi:systinet.com:demo:hr:employeesList";
        String tModelKey = "uddi:systinet.com:demo:employeeList:binding";
        Find_binding find_binding = new Find_binding();
        find_binding.setServiceKey(serviceKey);
        find_binding.addTModelKey(tModelKey);
        find_binding.setMaxRows(new Integer(10));

        //3. Call inquiry method
        System.out.print("Search in progress ..");
        BindingDetail bindingDetail = inquiry.find_binding(find_binding);
        System.out.println(" done");

        //4. Operate with result
        ListDescription listDescription = bindingDetail.getListDescription();
        if (listDescription != null) {
            int includeCount = listDescription.getIncludeCount();
            int actualCount = listDescription.getActualCount();
            int listHead = listDescription.getListHead();
            System.out.println("Displaying " + includeCount + " of " + actualCount
               + ", starting at position " + listHead);
        }

        BindingTemplateArrayList bindingTemplateArrayList
           = bindingDetail.getBindingTemplateArrayList();
        if (bindingTemplateArrayList == null) {
            System.out.println("Nothing found");
            return;
        }

        int position = 1;
        for (Iterator iterator = bindingTemplateArrayList.iterator();
          iterator.hasNext();) {
            BindingTemplate bindingTemplate = (BindingTemplate) iterator.next();
            System.out.println("Binding " + position + " : " +
                  bindingTemplate.getBindingKey());
            System.out.println(bindingTemplate.toXML());
            position++;
        }
    }
}

例2 SaveService v3

package example.publishing;

import org.systinet.uddi.InvalidParameterException;
import org.systinet.uddi.client.v3.UDDIException;
import org.systinet.uddi.client.v3.UDDIPublishStub;
import org.systinet.uddi.client.v3.UDDISecurityStub;
import org.systinet.uddi.client.v3.UDDI_Publication_PortType;
import org.systinet.uddi.client.v3.UDDI_Security_PortType;
import org.systinet.uddi.client.v3.struct.AuthToken;
import org.systinet.uddi.client.v3.struct.BusinessService;
import org.systinet.uddi.client.v3.struct.BusinessServiceArrayList;
import org.systinet.uddi.client.v3.struct.Description;
import org.systinet.uddi.client.v3.struct.Discard_authToken;
import org.systinet.uddi.client.v3.struct.DispositionReport;
import org.systinet.uddi.client.v3.struct.Get_authToken;
import org.systinet.uddi.client.v3.struct.Name;
import org.systinet.uddi.client.v3.struct.Save_service;
import org.systinet.uddi.client.v3.struct.ServiceDetail;

import javax.xml.soap.SOAPException;
import java.util.Iterator;

public class PrincipleSaveService {

    public static void main(String[] args) throws UDDIException,
             InvalidParameterException, SOAPException {

        String userName = "demo_john";
        String password = "demo_john";

        //1. Get API implementation from stub
        String securityUrl = "http://localhost:8888/registry/uddi/security";
        System.out.print("Using Security at url " + securityUrl + " ..");
        UDDI_Security_PortType security = UDDISecurityStub.getInstance(securityUrl);
        System.out.println(" done");
        String publishingUrl = "http://localhost:8888/registry/uddi/publishing";
        System.out.print("Using Publishing at url " + publishingUrl + " ..");
        UDDI_Publication_PortType publishing = UDDIPublishStub.getInstance(publishingUrl);
        System.out.println(" done");

        //2. Get authentication token
        System.out.print("Logging in ..");
        AuthToken authToken =
            security.get_authToken(new Get_authToken(userName, password));
        System.out.println(" done");
        String authInfo = authToken.getAuthInfo();

        //3. Create save object
        String businessKey = "uddi:systinet.com:demo:it";
        String serviceKey = ""; // serviceKey is optional
        int count = 1;
        String[] serviceNames = new String[count];
        String[] languageCodes = new String[count];
        languageCodes[0] = null; // can set an array of language codes
        serviceNames[0] = "Requests Service"; //service name
        String serviceDescription = "Saved by Example"; //service description
        BusinessService businessService = new BusinessService();
        businessService.setBusinessKey(businessKey);
        if (serviceKey != null && serviceKey.length() > 0)
            businessService.setServiceKey(serviceKey);
        businessService.addName(new Name(serviceNames[0], languageCodes[0]));
        businessService.addDescription(new Description(serviceDescription));

        Save_service save = new Save_service();
        save.addBusinessService(businessService);
        save.setAuthInfo(authInfo);

        //4. Call publishing method
        System.out.print("Save in progress ...");
        ServiceDetail serviceDetail = publishing.save_service(save);
        System.out.println(" done");

        //5. Operate with publishing result
        BusinessServiceArrayList businessServiceArrayList =
             serviceDetail.getBusinessServiceArrayList();
        int position = 1;
        for (Iterator iterator = businessServiceArrayList.iterator();
          iterator.hasNext();) {
            BusinessService service = (BusinessService) iterator.next();
            System.out.println("Service " + position + " : "
               + service.getServiceKey());
            System.out.println(service.toXML());
            position++;
        }
        //6. Discard authentication token
        System.out.print("Logging out ..");
        security.discard_authToken(new Discard_authToken(authInfo));
        System.out.println(" done");
    }
}

UDDI Version 1  目次

UDDI Version 1仕様が後続のバージョンの基礎となっています。

Inquire  目次
Publish  目次

UDDI Version 2  目次

UDDI Version 2仕様では、既存の概念が改善され、サービス予測などの新規機能が数多く導入されています。

Inquiry  目次
Publish  目次

UDDI Version 3  目次

UDDI Version 3仕様によって、パブリックおよびプライベートの両方のデプロイメントで有効なXML Webサービス・レジストリの構築および問合せに関する業界標準が大きく進歩しました。

Inquiry  目次

Publication  目次
Security  目次
Custody  目次

Custody and Ownership Transfer APIは、UDDIノード間のUDDI構造の転送およびその所有権の変更に使用します。ユースケースの1つとして、通常、ビジネスの再編成後に、選択したUDDI構造に対する責務をパブリッシャが別のユーザーに移譲する場合をあげることができます。

Subscription  目次

Subscription APIは、変更の対象をレジストリに登録したユーザーに、非同期で通知を送信するサービスです。これらのユーザーは、必要な情報のみを受信するように一致条件を指定するための一連のオプションを使用できます。

UDDI Version 3の拡張  目次

UDDI Version 3の拡張は、UDDI Version 3仕様を拡張したものです。次のデータ構造は、レジストリ・コントロール用のAPIおよびUDDIの仕様の正式なテクニカル・ノートとして承認されるAPIで使用されます。

データ構造  目次
businessEntityExt  目次

表4属性

名前必須
businessKeyオプション

この構造は、パフォーマンスを向上させるために、レジストリ・コントロールで使用されます。この構造は、businessEntityを拡張したものです。追加された要素は、関連するbusinessEntityを指すuddi:assertionStatusItemです。

businessInfoExt  目次

表5属性

名前必須
businessKeyオプション

この構造は、businessInfo構造を拡張したものです。追加された要素は、uddi_ext:contactInfosです。

contactInfo  目次

表6属性

名前必須
useTypeオプション

この構造は、businessInfoExtのユーザー名を表します。

contactInfos  目次

表7属性

名前必須
useTypeオプション

この構造は、contactInfosのリストを保持します。

operationalInfoExt  目次

表8属性

名前必須
entityKey必須
entityKeyV2オプション

この構造は、operationalInfo構造を拡張したものです。追加された要素は、uddi:nameです。entityKeyV2は、UDDI v2のキー値を保持します。

qualifiedKeyedReference  目次

表9属性

名前必須
tModelKey必須
keyNameオプション
keyValue必須

この構造は、範囲問合せで使用されるfindQualifierを保持します。

registeredInfoExt  目次

表10属性

名前必須
truncatedオプション

この構造は、ACL機能で使用されます。追加された要素は、ユーザーが所有はしていないが変更権限は持っているUDDIエンティティを指すuddi:serviceInfosおよびuddi:bindingTemplatesです。

serviceInfoExt  目次

表11属性

名前必須
serviceKey必須
businessKey必須

この構造は、serviceInfoを拡張したものです。この構造は、パフォーマンスを向上させるために、Webインタフェースで使用されます。追加された要素は、uddi:descriptionおよびuddi:bindingTemplatesです。

検索修飾子  目次

UDDI V3の仕様では、ベンダーが新しい検索修飾子を定義できます。 表12「Oracle Service Registryの追加の検索修飾子のサマリー」は、Oracle Service Registryの追加の検索修飾子およびそれをサポートするfind_xx操作のサマリーです。Inquiry APIの操作の詳細は、「Inquiry」を参照してください。

表12「Oracle Service Registryの追加の検索修飾子のサマリー」内の各短縮名は、後続の項目にリンクしています。tModelキーは、uddi:systinet.com:findQualifier:が前に付いている短縮名であることに注意してください。

表12 Oracle Service Registryの追加の検索修飾子のサマリー

短縮名サポートされている操作
find_businessfind_servicefind_bindingfind_tModelfind_relatedBusinesses
deletedTModels    
foreignEntities 
keyNameMatch
myEntities 
omitKeyNameMatch
omitKeyValueMatch
omitTModelKeyMatch
tModelKeyApproximateMatch
deletedTModels  目次

この検索修飾子では、非表示のtModelのみが戻されるため、管理者は、不要なtModelを検索して完全に削除できます。

レジストリの設定によって、delete_tModelで次のいずれの操作が実行されるかが決定されます。

  • find_tModel操作でのtModelの非表示(仕様で必須とされるデフォルトの動作)

  • tModelの実際の削除(tModelに対する依存性がない場合)

「管理者ガイド」の「Node」を参照してください。

tModelキーuddi:systinet.com:findQualifier:deletedTModels
サポートされている操作find_tModel
foreignEntities  目次

この検索修飾子は、コール元に属さないエンティティに結果を制限します。

注意注意

匿名のコール元の場合、問合せですべてのエンティティが戻されるため、この修飾子は有効ではありません。

tModelキーuddi:systinet.com:findQualifier:foreignEntities
サポートされている操作find_relatedBusinessesを除くすべてのfind_xx操作
keyNameMatch  目次

この検索識別子は、一致するkeyedReferencesのデフォルトのルールを変更します。デフォルトでは、keyNamesは、一般キーワードtModelKeyが指定されている場合にのみ比較されます。この検索修飾子を使用すると、keyNamesの比較が強制的に実行されます。

keyNameMatchとomitKeyNameMatch findQualifiersは相互排他的です。

tModelキーuddi:systinet.com:findQualifier:keyNameMatch
サポートされている操作すべてのfind_xx操作
myEntities  目次

この検索修飾子は、コール元に属するエンティティに結果を制限します。

注意注意

匿名のコール元の場合、この修飾子は有効ではありません。この場合、すべてのエンティティが戻されます。

tModelキーuddi:systinet.com:findQualifier:myEntities
サポートされている操作find_relatedBusinessesを除くすべてのfind_xx操作
omitKeyNameMatch  目次

この検索識別子は、一致するkeyedReferencesのデフォルトのルールを変更します。デフォルトでは、keyNamesは、一般キーワードtModelKeyが指定されている場合にのみ比較されます。この検索修飾子を使用すると、keyNamesの比較がスキップされます。

keyNameMatchとomitKeyNameMatch findQualifiersは相互排他的です。

tModelキーuddi:systinet.com:findQualifier:omitKeyNameMatch
サポートされている操作すべてのfind_xx操作
omitKeyValueMatch  目次

この検索識別子は、一致するkeyedReferencesのデフォルトのルールを変更します。デフォルトでは、keyValuesが比較されます。この検索修飾子を使用すると、keyValuesの比較がスキップされます。

omitKeyValueMatchとomitTModelKeyMatch findQualifiersは相互排他的です。

tModelキーuddi:systinet.com:findQualifier:omitKeyValueMatch
サポートされている操作すべてのfind_xx操作
omitTModelKeyMatch  目次

この検索識別子は、一致するkeyedReferencesのデフォルトのルールを変更します。デフォルトでは、tModelKeysが比較されます。この検索修飾子を使用すると、tModelKeysの比較がスキップされます。

omitKeyValueMatchとomitTModelKeyMatch findQualifiersは相互排他的です。

tModelキーuddi:systinet.com:findQualifier:omitTModelKeyMatch
サポートされている操作すべてのfind_xx操作
tModelKeyApproximateMatch  目次

この検索識別子は、一致するkeyedReferencesのデフォルトのルールを変更します。デフォルトでは、ワイルド・カードを使用せず、大/小文字を区別しないでtModelKeyが比較されます。この検索修飾子を使用すると、問合せ内のtModelKeyにワイルド・カードを含めることができます。

  • %は、ゼロ個以上の任意の文字と解釈されます。

  • _は、任意の1文字と解釈されます。

この動作は、approximateMatch検索修飾子と類似しています。

tModelキーuddi:systinet.com:findQualifier:tModelKeyApproximateMatch
サポートされている操作すべてのfind_xx操作