ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Enterprise Repository統合ガイド
11g リリース1 (11.1.1.7)
B72433-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 リポジトリ拡張性フレームワーク

この章では、リポジトリ拡張性フレームワーク(REX)アーキテクチャについて説明し、OpenAPIを有効にしてWSDLを使用する方法について解説します。

この章では、次の項目について説明します。

13.1 REXの概要

REXは、プログラムでOracle Enterprise Repositoryに統合するWebサービスAPIです。これは、業界で認められた標準に基づいており、相互運用性とプラットフォームの独立性に重点を置いて設計されています。REXでは、Web Services Description Language (WSDL v1.1)で記述された、リモート・プロシージャ・コール(RPC)Webサービスを使用します。これにより、クライアントで、任意のプラットフォームやWebサービスをサポートする任意の実装言語を使用して、Oracle Enterprise Repositoryと相互に動作できます。たとえば、Oracle Enterprise RepositoryはJ2EEアプリケーションですが、REXを使用して.NETクライアントとプログラムで相互に動作できます。


注意:

flashlineおよびregistryというインスタンスが、特にJavaパッケージ構造およびREXクラス名としてこのドキュメントで使用されています。


Oracle Enterprise RepositoryがSiteminderで保護されるように構成されているか、今後構成される場合、次のURLを無視するか、または保護しないようにポリシー・サーバーを構成して、OpenAPI統合が正しく機能できるようにする必要があります。

http://appserver.example.com/oer/services/


注意:

このドキュメントで使用している例は説明用であり、Oracle Enterprise Repository WSDLのバージョン間のパッケージ構造の違いのためにコンパイルされません。使用しているバージョンのOracle Enterprise Repositoryに合うように、パッケージ構造を変更する必要があります。


REXの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository拡張性フレームワーク(REX)のREX Javadocを参照してください。

13.2 REXのアーキテクチャ

図13-1に、REXのアーキテクチャを示します。

図13-1 REXのアーキテクチャ

この図については本文で説明しています。
「図13-1 REXのアーキテクチャ」の説明

Oracle Enterprise RepositoryおよびREXの高度なアーキテクチャは、次の高度な目標を考慮して設計されています。

この項の内容は次のとおりです。

13.2.1 サブシステムの概要

Oracle Enterprise RepositoryのREXを使用すると、様々なサブシステムにアクセスできます。これらのサブシステムは、システムの機能を論理的なカテゴリ(動作するエンティティのタイプとほぼ同様)に大まかにグループ化しています。このドキュメントの大部分は、これらのサブシステムに基づいた項で構成されています。

REXメソッドは、様々なサブシステムに基づいたスキームを使用して、名前が付けられています。このプロセスで使用されるアルゴリズムの詳細は、13.2.2項「CRUD-Qネーミング規則」を参照してください。REXで定義されているサブシステムは、次のとおりです。

  • 許容値

  • アセット

  • アセット・タイプ

  • 認証トークン

  • カテゴリ分け

  • カテゴリ分けタイプ

  • 部門

  • 抽出

  • インポート/エクスポート

  • プロジェクト

  • リレーションシップ

  • ロール

  • ユーザー

  • ベンダー

13.2.2 CRUD-Qネーミング規則

オープンAPIメソッドのネーミングで使用されているスキームは、CRUD-Qニーモニックに基づいています。CRUD-Qは、次の5つの操作を表しています。

  • C: 作成(Create)

  • R: 読取り(Read)

  • U: 更新(Update)

  • D: 削除(Delete)

  • Q: 問合せ(Query)

各メソッドは、次の例のように、そのメソッドが属するサブシステムの名前で始まり、次にそのサブシステム内で実行される操作の説明が続きます。

<サブシステム><操作>

たとえば、アセット・サブシステムで作成の操作を実行するメソッド名は、次のようになります。

assetCreate(...)

このネーミング規則を使用すると、次のような名前も考えられます。

assetRead(...)
assetUpdate(...)
assetDelete(...)
assetQuery(...)

サブシステムにはCRUD-Qセット以外の操作が含まれていることがあります。また、CRUD-Qの操作をすべて含んでいるわけではありません。たとえば、ユーザーを削除できないので、userDeleteメソッドはありませんが、userDeactivateメソッドはあります。表13-1に、サブシステムがCRUD-Q操作以外に含めることのできる操作の詳細なリストを示します。

表13-1 サブシステムとCRUD-Q規則の関係


作成 読取り 更新 削除 問合せ その他の機能

許容値リスト

はい

はい

はい

はい

はい

許可、アクティブ化、割当て、非アクティブ化、登録、リタイア、発行、未許可、割当て解除、登録解除、未発行、カスタム・アクセス設定の変更

アセット

はい

はい

はい

はい

はい


アセット・タイプ

はい

はい

はい

はい

はい


カテゴリ分けタイプ

はい

はい

はい

はい

はい


部門

はい

はい

はい

いいえ

はい


抽出

はい

はい

はい

いいえ

はい


プロジェクト

はい

はい

はい

はい

はい

閉じる、開く、再割当て、抽出、ユーザーの削除

リレーションシップ

はい

はい

はい

いいえ

はい


ロール

はい

はい

はい

はい

はい


ユーザー

はい

はい

はい

いいえ

はい

アクティブ化、非アクティブ化、ロックアウト、未承認

ベンダー

はい

はい

はい

はい

はい


連絡先

はい

はい

はい

はい

はい



13.2.2.1 メソッド呼出しの原子性

特に断りがなければ、REXの呼出しはすべて原子的です。すなわち、すべての呼出しは、完全に成功するか、完全に失敗するかのいずれかです。

たとえば、あるバージョンのcategorizationUpdateメソッドは、引数としてカテゴリ分けの更新の配列を取ります。この場合、カテゴリ分けの更新が1回失敗すると、カテゴリ分けの更新はすべて失敗します。

13.2.2.2 呼出し間のトランザクションの未サポート

現在、REXでは、呼出し間のトランザクションをサポートしていません。たとえば、エラーの場合、一連のREXの呼出しに関連付けれられた操作にロールバックできません。

13.2.3 基本的なWSDLのデータ型

REXでは、次の基本的なWSDLデータ型およびWSDLで定義された複合の型が使用されています。

次の型の配列が返されます。

  • xsd:int

  • xsd:long

  • xsd:string

  • xsd:boolean

  • xsd:dateTime

次のURLのIDEまたはWebサービス・ツールキットを指して、REX WSDLを使用することにより、APIスタブを動的に生成できます。

http://appserver/oer/services/FlashlineRegistry?WSDL

OERとのカスタム統合をOracle BPM 11gから作成する場合は、かわりに次のURLを使用します。

http://appserver/oer/services/RexAPI?wsdl

Oracle Enterprise Repository REX WSDLのJavaスタブは、AXIS WSDL2javaユーティリティを使用して作成できます。

java -cp .;axis.jar; xerces.jar; commons-discovery.jar; commons-logging.jar; jaxen-full.jar; jaxrpc.jar; saaj.jar;wsdl4j.jar; xalan.jar org.apache.axis.wsdl.WSDL2Java

この変換プロセスの完了に必要なJARファイルは、次のとおりです。

  • axis.jar

  • xerces.jar

  • commons-discovery.jar

  • commons-logging.jar

  • jaxen-full.jar

  • jaxrpc.jar

  • saaj.jar

  • wsdl4j.jar

  • xalan.jar


注意:

URL内のappserverは、Oracle Enterprise Repositoryがインストールされているサーバーの名前で置き換えてください。


13.2.4 Oracle Enterprise Repository REXのバージョンの考慮事項

Oracle Enterprise Repository REXはOracle Enterprise Repositoryと同様に発展します。このプロセスの結果として、REXの新旧バージョン間で非互換が起こることがあります。すべてのバージョン間の互換性の実現を目標としていますが、下位互換性が実現されるかどうかは予測できない場合もあります。したがって、制限が避けられない可能性があります。Oracle Enterprise Repository REXには、次の下位互換性拡張が含まれます。

  • Oracle Enterprise Repository Weサービスへの新しいメソッドの追加

  • WSDLでの新しい複合型の定義

これらの下位互換性への変更に関して、新機能を利用する必要がある場合にかぎり、クライアント・プロキシの再生成が必要になります。

非互換の変更を回避できない場合にかぎり、サービスのネームスペースが変更されます。このような変更の例には、既存の複合型の変更や、サービスのメソッドの署名における変更があります。この場合、最低限のコード変更があるので、クライアント・プロキシの再生成が必要です。以前のバージョンのREXから生成されたクライアント・プロキシでは、新しいサービスに接続できません。

複合型のネームスペースは変更されません。

13.3 基本的な概念

この項では、オープンAPIの有効化およびWSDLの使用の開始方法などのREXの基本的な概念について説明します。この項の内容は次のとおりです。

13.3.1 Oracle Enterprise RepositoryでのオープンAPIの有効化

この手順は、Oracle Enterprise Repositoryの「管理」画面で実行します。

  1. 「システム設定」をクリックします。

  2. 新しいシステム設定の有効化テキスト・ボックスにプロパティcmee.extframework.enabledを入力します。

  3. 「有効化」をクリックします。オープンAPIセクションが表示されます。

  4. cmee.extframework.enabledプロパティにTrueが設定されていることを確認します。

  5. 「保存」をクリックします。これで、REXがOracle Enterprise Repositoryインスタンス内で有効になっています。

13.3.2 WSDLの使用

REXを使用するための最初の手順は、Oracle Enterprise Repositoryサーバーとの通信に必要なクライアント側スタブの生成です。これは、通常、特定のWebサービス・ツールキットで提供されている自動ツールを使用して実行されます。この項では、様々な統合開発環境およびツールキットを使用して、クライアント・スタブを生成する方法について説明します。

この項の内容は次のとおりです。

Visual Studio .NET

  1. ソリューション・エクスプローラで「Web References」ノードを右クリックし、図13-2に示すように、「Add Web Reference」を選択します。「Add Web Reference」ダイアログが表示されます。

    図13-2 ソリューション・エクスプローラ・ウィンドウ

    この図については本文で説明しています。
    「図13-2 ソリューション・エクスプローラ・ウィンドウ」の説明

  2. 図13-3に示すように、Web参照名を指定します。

    図13-3 「Add Web Reference」ダイアログ

    この図については本文で説明しています。
    「図13-3 「Add Web Reference」ダイアログ」の説明

    適切なURLを指定してアプリケーション・サーバー(実行中の場合)から、あるいは、Eclipseプロジェクトのローカルの静的ファイルから、Oracle Enterprise Repository WSDLファイルを直接ロードできます。URLを使用する場合、このファイルは次の場所にあります(yourserverとappnameを適切な値に置き換えてください)。

    http://yourserver:port/appname/services/FlashlineRegistry?wsdl

  3. サービスのエンドポイントに接続します。Web参照を作成後、クライアント・サービス・プロキシのインスタンスを設定して、これを使用します。

    flashline.FlashlineRegistryService registry = new flashline.FlashlineRegistryService();

  4. (Web参照の設定に使用したWSDLファイルに含まれている)サービスのデフォルトURLがWebサービスの実際のアドレスではない場合、エンドポイント・アドレスを次のように変更できます。

    registry.Url = "http://appserver/oer/services/FlashlineRegistry";

これで、アプリケーションがREXを介してOracle Enterprise Repositoryと相互に動作できるようになりました。

Eclipse - Lombozプラグイン

LombozプラグインはEclipseと連携しますが、WebサービスをサポートするEclipseプラグインが動作する必要があります。ほとんどのツールまたはプラグインは、通常、次の項目について要求されます。

  • WSDLファイルの場所

  • 生成したコードが使用できるプロジェクトのソース・ディレクトリ

  • コンパイルするWSDLファイルのバージョン

適切なURLを指定してアプリケーション・サーバー(実行中の場合)から、あるいは、Eclipseプロジェクトのローカルの静的ファイルから、Oracle Enterprise Repository WSDLファイルを直接ロードできます。WSDL URLは、次の場所にあります(www.example.comとappnameを適切な値に置き換えてください)。

http://www.example.com/appname/services/FlashlineRegistry?wsdl

生成したクライアント・プロキシ・クラスのターゲットとして、プロジェクトのビルド・パスのソース・ディレクトリを選択します。

Oracle Enterprise Repository WSDLは、WSDL標準のバージョン1.1に準拠しています。

認証と認可

REXを使用するための最初の手順は、サーバーでの認証です。authTokenCreateメソッドを使用して認証が実行されます。このメソッドは、Oracle Enterprise Repositoryでの認証で使用する際に、ユーザーIDとパスワードを引数として取ります。IDとパスワードの認証が成功すると、認証トークンが返されます。このトークンは、後続のすべてのREXの呼出しで使用する必要があります。

有効なAuthTokenがすべてのREXメソッドに含まれていない場合、OpenAPIExceptionがスローされます。これは、authTokenCreateおよびauthTokenDelete以外のすべてのメソッドに適用されます。

次の例は、AuthTokenを取得してこれを後続のREX呼出しで使用する方法を示しています。

例13-1 AuthTokenを取得してREX呼出しで使用する方法

package com.example.flashlineclient;
//The imports below are assumed for any of the included examples
import javax.xml.rpc.ServiceException;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
 com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Asset;
public class FlexTest {
public FlexTest () {
}
public static void main(String[] pArgs)throws OpenAPIException, RemoteException, ServiceException {
try {
FlashlineRegistry lRegistry = null;
AuthToken lAuthToken = null;
URL lURL = null;
lURL = new URL("http://www.example.com/appname/services/FlashlineRegistry");
//"www.example.com" should be your server address
//"appname" is the application name of the location that the Registry is running
 on
//These two things must be changed to the proper values in every example
lRegistry = new FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
lAuthToken = lRegistry.authTokenCreate("username", "password");
System.out.println(lAuthToken.getToken());
//displaying the authtoken as a string to the screen
Asset lAsset = lRegistry.assetRead(lAuthToken, 559);
//reading asset number 559
System.out.println(lAsset.getName());
//displaying the name of asset 559 to the screen
} catch(OpenAPIException lEx) {
System.out.println("ServerCode = "+ lEx.getServerErrorCode());
System.out.println("Message = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
System.out.println("execution completed");
System.exit(0);
}
}

認可

REXでは、Oracle Enterprise Repositoryアプリケーションと同じ認可ルールが実行されます。認可に使用するユーザーIDとパスワードでは、REXでユーザーに使用できる権限が判定されます。たとえば、プロジェクトに割り当てられた編集権限を持たない認証済のユーザーがprojectCreate REXメソッドを使用してプロジェクトを作成しようとした場合、OpenAPIExceptionがスローされます。

例外処理

オープンAPIはSOAPフォルトでサーバー・エラーをクライアントに通知します。SOAPフォルトが処理される方法は、使用している言語とSOAPツールキットによって異なります。

この項では、一般的なプラットフォームとツールキットの組合せを使用して、クライアント・コード内でオープンAPIが生成した例外を検出して処理する方法を示します。

JavaとAXIS

オープンAPIがスローした例外は、SOAPフォルトとして転送されてから、AXISクライアント・ツールキットでJava例外としてデシリアライズされます。つまり、AXISは、SOAPフォルトを対応するクライアント側OpenAPIExceptionクラスにマップしようとします。サーバー側エラーは、com.flashline.registry.openapi.OpenAPIExceptionインスタンスとしてクライアントに示されます。したがって、クライアント・コードは、前述のコードから、次に示したコードで例外を取得できます。

try {
lAsset = lRegistry.assetCreate(..);
} catch(OpenAPIException lEx) {
System.out.println("ServerCode = "+ lEx.getServerErrorCode());
System.out.println("Message = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}

.NET

.NETで使用済のWebサービスを使用することは、若干複雑です。すべてのサービス例外は、タイプSystem.Web.Services.Protocols.SoapExceptionの例外としてクライアント側で取得されます。このため、オープンAPIでスローされたOpenAPIExceptionで使用可能な拡張情報の取得は若干注意が必要です。.NET SoapExceptionプロパティは、SOAPフォルト・メッセージを示します。ただし、OpenAPIExceptionで提供された追加フィールド(標準SOAPフォルトに明示的にマップされているもの以外)は、.NET SoapExceptionのXML詳細プロパティを手動で解析して取得する必要があります。たとえば、次のようなコードは、サーバー側のエラー・コードとOpenAPIExceptionで返されたスタック・トレースを表示するために使用できます。

try
{
registry.testException();
}
catch(SoapException exc)
{
XmlNode lNode = null;
lNode = exc.Detail.SelectSingleNode("*/serverErrorCode");
if(lNode != null)
Console.Out.WriteLine("Error Code: "+lNode.InnerText);
lNode = exc.Detail.SelectSingleNode("*/serverStackTrace");
if(lNode != null)
Console.Out.WriteLine("Server Stack Trace: \n"+lNode.InnerText);
}

返されたSOAPフォルトがserverErrorCodeという名前の2つ以上のXML要素を含まないようにするために、*/serverErrorCodeよりも明示的なXPath式を使用することをお薦めします。

次のSOAPレスポンスは、SOAPフォルト・メッセージとして表されたOpenAPIExceptionを示します。

例13-2 SOAPフォルト・メッセージとして表されたOpenAPIException

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>Error [100], Severity [SEVERE]:An unkown server-side error occured.
Please record stack trace (if available) and contact technical
 support.</faultstring>
<detail>
<com.flashline.cmee.openapi.OpenAPIException xsi:type="ns1:OpenAPIException"
xmlns:ns1="http://base.openapi.registry.flashline.com">
<message xsi:type="xsd:string">Error [100],
Severity [SEVERE]:An unkown server-side error occured.
Please record stack trace (if available) and contact technical support.</message>
<serverErrorCode xsi:type="xsd:int">100</serverErrorCode>
<serverStackTrace xsi:type="xsd:string">java.lang.NullPointerException&#xd;
at java.util.HashMap.&lt;init&gt;(HashMap.java:214)&#xd;
...
at java.lang.Thread.run(Thread.java:534)&#xd;
</serverStackTrace>
<severity xsi:type="xsd:string">SEVERE</severity>
</com.flashline.cmee.openapi.OpenAPIException>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>

検証

エンティティをOracle Enterprise Repositoryに保存しようとする際に、入力内容の検証が試行されます。欠落しているデータや無効なデータがあると、サーバーは、フィールドのリストとそれぞれのエラーが含まれるOpenAPIExceptionをスローします。

詳細は、「例外処理」を参照してください。

REXにおける問合せの考慮事項

基準オブジェクトは、現在、用語とグループ化のさらに柔軟性の高い表現に移行しています。このオブジェクトが発生すると、これらの変更は、基準オブジェクトを使用して問合せを実行する場合に、特定のAPI機能を使用できるかどうかに影響します。サブシステムでは、対応する基準オブジェクトのみ直接評価されます。このドキュメントで説明しないかぎり、基礎となるSearchTermGroupの拡張機能は使用されません。

バイナリ・データの送信(添付ファイル)

様々なREXメソッドでは、クライアントとサーバー間で大量のバイナリ・データの送受信を必要とする場合があります。たとえば、インポート/エクスポート・サブシステムでは、インポート元からペイロードを送信するメソッドやエクスポート済アセットを表すペイロードを受信するメソッドが提供されています。

通常、バイナリ・データは、WebサービスのRPC起動によって、Dynamic Internet Message Exchange(DIME)、SOAP with Attachments (SwA)またはBase-64エンコーディングを介して、転送されます。それぞれに長所と短所がありますが、3つすべてを直接サポートしているクライアントは少数です。

Oracle Enterprise RepositoryのオープンAPIは、バイナリ・データの転送に3つのメカニズムすべてをサポートしています。詳細は、次の項を参照してください。バイナリ・データの転送に提供されているメソッドには3つのバージョンがあり、それぞれが異なる転送メカニズムをサポートしています。たとえば、エクスポート結果を取得するには、ユーザーは次のメソッドのいずれかを選択できます。

  • importGetResultsB64

    base-64エンコーディング形式でエクスポート結果を取得します。これは、あまり一般的ではありませんが、クライアントがbase-64データをエンコードまたはデコードできる場合は、どのプラットフォームでも使用できます。

  • importGetResultsDIME

    DIMEプロトコルを使用して、エクスポート結果を添付ファイルとして取得します。これは、ほとんどの.NETクライアントに優先される選択肢です。

  • importGetResultsSwA

    SOAP with Attachments (SwA)プロトコルを使用して、エクスポート結果を添付ファイルとして取得します(MIMEベース)。

.NETとMicrosoft Web Services Enhancement(WSE)キットでのDIME添付ファイルの使用

Microsoftでは、標準の.Net Webサービス・ツールキットの拡張を提供しています。Microsoft Web Services Enhancement(WSE)キットでは、Dynamic Internet Messaging Exchange(DIME)プロトコルを使用して、Webサービスを介した添付ファイルの送受信などの拡張機能を提供しています。

次のコード・スニペットは、DIME添付ファイルによるデータ送信の例を示しています。

例13-3 DIME添付ファイルによるデータ送信の例

// relax the requirement for the server to understand ALL headers. This MUST be
// done, or the call with the attachment fails. After the call, if you wish,
// you can set this back to "true"
registry.RequestSoapContext.Path.EncodedMustUnderstand= "false";
// clear the attachments queue
registry.RequestSoapContext.Attachments.Clear();
registry.RequestSoapContext.Attachments.Add(
new Microsoft.Web.Services.Dime.DimeAttachment("0", "application/zip",
Microsoft.Web.Services.Dime.TypeFormatEnum.MediaType, "c:\\tmp\\import.zip"));
// start an import running on the server
registry.importExecute(lAuthToken, "flashline", null, "FEA Flashpack Import",
null);
// do some polling (calls to importStatus) to monitor the import progress,
// if you wish

次のコード・スニペットは、DIME添付ファイルによるデータ受信の例を示しています。

例13-4 DIME添付ファイルによるデータ受信の例

// relax the requirement for the server to understand ALL headers. This MUST be
// done, or the call with the attachment fails. After the call, if you wish,
// you can set this back to "true"
registry.RequestSoapContext.Path.EncodedMustUnderstand= "false";
// clear the attachments queue
registry.RequestSoapContext.Attachments.Clear();
// start an export
flashline.ImpExpJob lJob =
registry.exportExecute(lAuthToken, "flashline", null, "Complete Export",
 "flashline",
"<entitytypes>
<entitytype type=\"acceptableValueList\">
<entities>
<entity id=\"100\"/>
</entities>
</entitytype>
</entitytypes>");
// do some polling (calls to exportStatus) to watch the progress of the
// export, if you wish...
// this call blocks until either the method returns (or an exception is
 thrown),
// or the call times out.
registry.exportGetResultsDIME(lAuthToken, lJob);
// check to see if the call resulted in attachments being returned...
if(registry.ResponseSoapContext.Attachments.Count > 0)
{
Stream lStream = registry.ResponseSoapContext.Attachments[0].Stream;
// write the data out somewhere...
}

添付ファイルとJava AXISクライアントでのSOAPの使用

Axisクライアントでは、SOAP添付ファイルをJavaで処理する機能が提供されています。詳細は、http://www-106.ibm.com/developerworks/webservices/library/ws-soapatt/を参照してください。

次のコード・スニペットは、データ受信の例を示しています。

byte[] lResults = null;
ImpExpJob lExportJob =
mFlashlineRegistrySrc.exportExecute(mAuthTokenSrc,"flashline",null,
"Export Assets","default", createAssetQuery().toString());
lExportJob =
mFlashlineRegistrySrc.exportStatus(mAuthTokenSrc, lExportJob);
lResults =
mFlashlineRegistrySrc.exportGetResultsB64(mAuthTokenSrc, lExportJob);
// write the results out to disk in a temp file
File lFile = null;
String lTempDirectory =
System.getProperty("java.io.tmpdir");
lFile = new File(lTempDirectory + File.separator + "impexp.zip");
FileOutputStream lOS = new FileOutputStream(lFile);
BufferedOutputStream lBOS = new BufferedOutputStream(lOS);
lBOS.write(lResults);
lBOS.flush();
lBOS.close();
lOS.close();

次のコード・スニペットは、DIME添付ファイルによるデータ送信の例を示しています。

// open file and attach as data source
InputStream lIS = new FileInputStream(lFile);
((Stub)mFlashlineRegistryDest)._setProperty
(Call.ATTACHMENT_ENCAPSULATION_FORMAT, Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
ByteArrayDataSource lDataSource = new ByteArrayDataSource(lIS,
 "application/x-zip-compressed");
DataHandler lDH = new DataHandler(lDataSource);
// add the attachment
((Stub)mFlashlineRegistryDest).addAttachment(lDH);
ImpExpJob lJob =
mFlashlineRegistryDest.importExecute(mAuthTokenDest, "flashline", null, "Import
 Assets Test", null);