UDDI::Lite (SOAP::Lite v.0.50)(日本語チョー訳)

by Hippo2000(2001/5/23)

UDDI::LiteのPODなのです。

なおこのドキュメントはCPAN-Searchで出てきたドキュメント(PODを変換したもの)を日本語に訳そうとしたものです。わかりにくい部分は本物を見てください。(^^;;

原本の著作権はPaul Kulchenko さんがお持ちです。
Paul Kulchenko さんにはメールで了解をいただきました。

なお内容等が間違っていたら修正します。ご連絡ください。


目次


名前

UDDI::Lite - PerlでのUDDIクライアントのためのライブラリ


概要

  use UDDI::Lite;
  print UDDI::Lite
    -> proxy('http://uddi.microsoft.com/inquire')
    -> find_business(name => 'old')
    -> result
    -> businessInfos->businessInfo->serviceInfos->serviceInfo->name;

同じコードをautodispatchで:

  use UDDI::Lite +autodispatch => 
    proxy => 'http://uddi.microsoft.com/inquire'
  ;

  print find_business(name => 'old')
    -> businessInfos->businessInfo->serviceInfos->serviceInfo->name;                         

またはインポートして:

  use UDDI::Lite 
    'UDDI::Lite' => [':inquire'],
    proxy => 'http://uddi.microsoft.com/inquire'
  ;

  print find_business(name => 'old')
    -> businessInfos->businessInfo->serviceInfos->serviceInfo->name;                         

発行API:

  use UDDI::Lite 
    import => ['UDDI::Data'], 
    import => ['UDDI::Lite'],
    proxy => "https://some.server.com/endpoint_fot_publishing_API";

  my $auth = get_authToken({userID => 'USERID', cred => 'CRED'})->authInfo;
  my $busent = with businessEntity =>
    name("Contoso Manufacturing"), 
    description("We make components for business"),
    businessKey(''),
    businessServices with businessService =>
      name("Buy components"), 
      description("Bindings for buying our components"),
      serviceKey(''),
      bindingTemplates with bindingTemplate =>
        description("BASDA invoices over HTTP post"),
        accessPoint('http://www.contoso.com/buy.asp'),
        bindingKey(''),
        tModelInstanceDetails with tModelInstanceInfo =>
          description('some tModel'),
          tModelKey('UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4')
  ;
  print save_business($auth, $busent)->businessEntity->businessKey;


説明

UDDI::Lite for Perl は簡単で軽量なUniversal Description, Discovery and Integration (UDDI) サーバーへのインターフェースを提供します。

UDDIについて知りたい場合には、http://www.uddi.org/を訪れてみてください。

このライブラリの主要な機能は以下のとおりです:


クラスとパッケージの概要

このライブラリにより提供されるクラスの一覧を以下の表に示します。

 UDDI::Lite.pm
 -- UDDI::Lite         -- メインのクラス。すべてのロジックを提供します
 -- UDDI::Data         -- シリアライゼーション・アーキテクチャのための拡張を提供
 -- UDDI::Serializer   -- データ構造体をUDDI/SOAP パッケージへシリアライズ
 -- UDDI::Deserializer -- 結果をオブジェクトへデシリアライズします
 -- UDDI::SOM          -- デシリアライズされたオブジェクト・ツリーへのアクセスを提供

UDDI::Lite

UDDI::Liteが提供するすべてのメソッドは値の設定と取得の両方に使うことができます。パラメータを与えなければ、現在の値を取得します。パラメータを与えると、新しい値が代入され、メソッドはオブジェクト(他に何も述べられてなければ)を返します。これはこれらの呼び出しを以下のように積み重ねるときに便利です:

  $uddi = UDDI::Lite
    -> on_debug(sub{print@_})
    -> proxy('http://uddi.microsoft.com/inquire')
  ;

順序は重要ではなく、new()メソッドを最初に呼び出すこともできます。そうしなければ、UDDI::Liteは代わりにそれを行います。しかしnew()メソッドは追加の書き方を提供します:

  $uddi = new UDDI::Lite
    on_debug => sub {print@_},
    proxy => 'http://uddi.microsoft.com/inquire'
  ;

new() はメソッド名と値を持つハッシュを受け取り、渡された値で適切なメソッドを呼び出します。

new() はオプションなので、これ以上は説明しません。

SOAP::Liteから継承された他に利用できるメソッドと、とても使われるものは以下のものがあります:

proxy()
transport->proxy()のショートカット。 これはエンドポイントを指定させ、同時に必要なモジュールをロードします。SOAP呼び出しを実行するためには必要です。モジュール名はエンドポイントに特有のプロトコルに依存して決められます。SOAP::Liteが残りの仕事をやります。
namespace()
serializer->namespace()のショートカット。生成されるエンベロープのためのデフォルトの名前空間を指定させます。デフォルトでは 'SOAP-ENV' 。
on_fault()
on_faultイベントのためのハンドラを指定させます。デフォルトの動きは転送エラーではdieし、その他の場合には何もしません。この動きはグローバルにあるいは特定のオブジェクトにローカルに変更することができます。
on_debug()
on_debugイベントでのハンドラを指定させます。デフォルトの動きはありません。代わりにUDDI::Liteのための+trace/+debug オプションを使ってください。
 

UDDI::Data

UDDI要素のための値を名前を指定したければ、このクラスを使うことができます。例えばUDDI::Data->name('businessInfo')->value(123)<businessInfo>123</businessInfo>にシリアライズされます。UDDI::Data-name(businessInfo => 123) も同様です。

パラメータに名前を与えたえたければ以下のように指定することができます:

  find_business(name => 'old')

もしくはUDDI::Dataでやると:

  find_business(UDDI::Data->name(name => 'old'))

後者にはいくつかの利点があります:それはどんなラベルでも機能します。そのため以下のようにできます:

  find_business(UDDI::Data->name(name => UDDI::Data->name(subname => 'old')))

そしてこの書き方で配列を作ることもできます:

  find_business(UDDI::Data->name(name => 
    [UDDI::Data->name(subname1 => 'name1'), 
     UDDI::Data->name(subname2 => 'name2')]))

これは以下のようにシリアライズされます:

  <find_business xmlns="urn:uddi-org:api" generic="1.0">
    <name>
      <subname1>name1</subname1>
      <subname2>name2</subname2>
    </name>
  </find_business>

標準の要素のためにより簡単な書き方があります:

  find_business(
    findQualifiers(findQualifier('sortByNameAsc',
                                 'caseSensitiveMatch')),
    name('M')
  )

そして

  find_business(
    findQualifiers([findQualifier('sortByNameAsc'), 
                    findQualifier('caseSensitiveMatch')]), 
    name('M')
  )

両方とも以下のものを生成します:

  <SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
      <find_business xmlns="urn:uddi-org:api" generic="1.0">
        <findQualifiers>
          <findQualifier>sortByNameAsc</findQualifier>
          <findQualifier>caseSensitiveMatch</findQualifier>
        </findQualifiers>
        <name>M</name>
      </find_business>
    </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

("UDDI Programmer's API Specification"に従って)適正な組み合わせであればどのような組み合わせでも使うことができます。例えばname(name('myname'))のような普通でないものを生成しようとすると、以下のようになります:

  Don't know what to do with 'name' and 'name' elements ....

本当にそうする必要があれば、上記で説明したUDDI::Dataの書き方を使ってください。

特殊なケースとして、メソッド呼び出しの最初のパラメータとしてハッシュを渡すことができます。そしてこのハッシュの値は先頭要素の属性として追加されます:

  find_business({maxRows => 10}, UDDI::Data->name(name => old))

これは以下のようになります:

  <find_business xmlns="urn:uddi-org:api" generic="1.0" maxRows="10">
    ....
  </find_business>

メソッド呼び出しからの(authInfoでしたいであろうことのように)取得したのとまったく同じようにパラメータを戻すこともできます。

同じインターフェースを通して属性と要素にアクセスすることができます:

  my $list = find_business(name => old);
  my $bis = $list->businessInfos;
  for ($bis->businessInfo) {
    my $s = $_->serviceInfos->serviceInfo;
    print $s->name,        # element
          $s->businessKey, # attribute
          "\n";
  }

他の言語(VBのような)で利用できるwith演算子により提供される利点に合わせて、柔軟性を高める同じような機能を提供しています:

    with findQualifiers => 
      findQualifier => 'sortByNameAsc',
      findQualifier => 'caseSensitiveMatch'

これは以下のものと同じです:

    with(findQualifiers => 
      findQualifier('sortByNameAsc'),
      findQualifier('caseSensitiveMatch'),
    )

そして:

    findQualifiers->with( 
      findQualifier('sortByNameAsc'),
      findQualifier('caseSensitiveMatch'),
    )

これは、上記で説明したのと同じコードを生成します。

    findQualifiers(findQualifier('sortByNameAsc',
                                 'caseSensitiveMatch')),

withの書き方の利点は属性と要素を同じインタフェースで指定できることです。最初の引数は他のすべての要素と属性が結び付けられる要素です。提供される例とテストは異なる書き方をカバーします。

AUTODISPATCHING

UDDI::Lite はautodispatching 機能を提供します。これによりローカルに見た目が似た、リモートにアクセスするプログラムを作成させます。

例えば:

  use UDDI::Lite +autodispatch => 
    proxy => 'http://uddi.microsoft.com/inquire';

これは、すべての'http://uddi.microsoft.com/inquire'.へのUDDI呼び出しを自動実行するように伝えます。この後の呼び出しは以下のようになります:

  find_business(name => 'old');
  find_business(UDDI::Data->name(name => 'old'));
  find_business(name('old'));

バグと制限


可用性

現在、UDDI::Lite はSOAP::Liteパッケージの一部として配布されています。http://soaplite.com/またはCPAN ( http://search.cpan.org/search?dist=SOAP-Lite ). からダウンロードすることができます。


参考資料(SEE ALSO)

SOAP::Lite ( http://search.cpan.org/search?dist=SOAP-Lite ) UDDI ( http://search.cpan.org/search?dist=UDDI )


著作権(COPYRIGHT)

Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


A作者(AUTHOR)

Paul Kulchenko (paulclinger@yahoo.com)


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。