ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Intelligence Publisher開発者ガイド
11gリリース1(11.1.1)
B66710-02
  目次へ移動
目次
索引へ移動
索引

前
前へ
 
次へ
次へ
 

8 配信マネージャJava APIの使用

この章では、BI Publisherの配信マネージャAPIについて説明します。

内容は次のとおりです。

8.1 配信マネージャの使用

配信マネージャは、BI Publisherドキュメントの配信制御に使用可能なJava APIのセットです。配信マネージャは、次のタスクの実行に使用します。

配信マネージャを使用するには、次の手順を実行します。

  1. DeliveryManagerインスタンスを作成します。

  2. createRequest()メソッドを使用して、DeliveryRequestインスタンスを作成します。

  3. 要求のプロパティ(DeliveryRequestの宛先など)を追加します。ほとんどのプロパティには文字列値が必要です。詳細は、各配信チャネルでサポートされているプロパティを参照してください。

  4. ドキュメントをDeliveryRequestに設定します。

  5. submit()をコールし、配信要求を実行します。

1つの配信要求で処理できるのは、1つのドキュメントと1つの宛先です。これによって、監視と再送信が必要に応じて容易に実行できます。

DeliveryRequestを使用すると、次の2つの方法でドキュメントを設定できます。

ダイレクト・モードを設定すると、配信マネージャで配信のストリーム化がサポートされます。第8.14項「ダイレクト・モードとバッファリング・モード」を参照してください。

この章では、ドキュメントの次の配信チャネルについて説明します。

8.2 電子メールによるドキュメントの配信

次に、電子メール経由で配信するコードの例を示します。

例8-1 電子メールによるドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_SMTP_EMAIL);
 
     // set email subject
     req.addProperty(DeliveryPropertyDefinitions.SMTP_SUBJECT, "test mail");
     // set SMTP server host
     req.addProperty(
       DeliveryPropertyDefinitions.SMTP_HOST, "mysmtphost");
     // set the sender email address
     req.addProperty(DeliveryPropertyDefinitions.SMTP_FROM, "myname@foobar.com.example");
     // set the destination email address
     req.addProperty(
       DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS, "user1@foobar.com.example, user2@foobar.com.example" );
     // set the content type of the email body
     req.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_TYPE, "application/pdf");
     // set the document file name appeared in the email
     req.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_FILENAME, "test.pdf");
     // set the document to deliver
     req.setDocument("/document/test.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

次の表に、サポートされているプロパティを示します。

表8-1 電子メール配信のプロパティ

プロパティ 説明

SMTP_TO_RECIPIENTS

必須

カンマで区切った複数の受信者を入力します(例: "user1@foobar.com.example, user2@foobar.com.example")。

SMTP_CC_RECIPIENTS

オプション

カンマで区切った複数の受信者を入力します。

SMTP_BCC_RECIPIENTS

オプション

カンマで区切った複数の受信者を入力します。

SMTP_FROM

必須

送信者の電子メール・アドレスを入力します

SMTP_REPLY_TO

オプション

返信先の電子メール・アドレスを入力します。

SMTP_SUBJECT

必須

電子メールのサブジェクトを入力します。

SMTP_CHARACTER_ENCODING

オプション

デフォルトは"UTF-8"です。

SMTP_ATTACHMENT

オプション

電子メールに添付する場合は、添付オブジェクトの名前を入力します。

SMTP_CONTENT_FILENAME

オプション

添付ファイルの名前を入力します(例: invoice.pdf)。

SMTP_CONTENT_DISPOSITION

添付ファイルの内容の処理値は"inline"または"attachment"です。デフォルトは"attachment"です。

SMTP_CONTENT_TYPE

必須

MIMEタイプを入力します。

SMTP_SMTP_HOST

必須

SMTPホスト名を入力します。

SMTP_SMTP_PORT

オプション

SMTPポートを入力します。デフォルトは25です。

SMTP_SECURE_CONNECTION

このプロパティはセキュアに使用できる接続方法を制御します。

有効な値は次のとおりです。

  • "none": デフォルト

  • "tls": サーバーがコマンドをサポートする際にSTARTTLSを使用します。

  • "tls_required": サーバーがコマンドをサポートしていない場合には、STARTTLSを使用して停止します。

  • "ssl": Secure Sockets Layer向け

SMTP_SMTP_USERNAME

オプション

SMTPサーバーが認証を必要とする場合は、サーバーのユーザー名を入力します。

SMTP_SMTP_PASSWORD

オプション

SMTPサーバーが認証を必要とする場合は、入力したユーザー名に対応するパスワードを入力します。

SMTP_ATTACHMENT_FIRST

オプション

電子メールに添付を含めるときに、その添付を最初に表示する場合は"true"を入力します。最初に表示しない場合は"false"を入力します。


8.2.1 複数の受信者の定義

電子メール・サーバーによる配信チャネルでは、1つの要求に複数のドキュメントと複数の配信先を設定できます。次に、複数のTOアドレスと複数のCCアドレスを設定するコードの例を示します。

例8-2 複数の受信者の定義のサンプル・コード

    // set the TO email addresses
     req.addProperty(
       DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS,
        "user1@foobar.com.example, user2@foobar.com.example, user3@foobar.com.example");
 
     // set the CC email addresses
     req.addProperty(
       DeliveryPropertyDefinitions.SMTP_CC_RECIPIENTS, 
        "user4@foobar.com.example, user5@foobar.com.example, user6@foobar.com.example");
 

8.2.2 1つの要求への複数のドキュメントの添付

Attachmentユーティリティ・クラス(oracle.apps.xdo.delivery.smtp.Attachment)を使用すると、複数のドキュメントが1つの要求に添付されます。次に、その使用方法の例を示します。

例8-3 1つの要求への複数のドキュメントの添付のサンプル・コード

     :
     :
   // create Attachment instance
   Attachment m = new Attachment();

   // add PDF attachment 
   m.addAttachment(
       "/pdf_doc/invoice.pdf",      // file to deliver
       "invoice.pdf",               // file name as appears in email
       "application/pdf");          // content type

   // add RTF attachment 
   m.addAttachment(
       "/rtf_doc/product.rtf",      // file to deliver
       "product.rtf",               // file name appears in the email
       "application/rtf");          // content type

   // add XML attachment
   m.addAttachment(
       "/xml_doc/data.xml",          // file to deliver
       "data.xml",                   // file name appears in the email
       "text/xml");                  // content type

   // If you want to attach HTML doucments, use addHtmlAttachment().
   // This method automatically resolves the image references 
   // in your HTML document and attaches those images. 
   m.addHtmlAttachment("/html_doc/invoice.html");
 
   // add the attachment to the request
   req.addProperty(DeliveryPropertyDefinitions.SMTP_ATTACHMENT, m);

     :
     :  

8.2.3 HTMLドキュメントの添付

複数のHTMLドキュメントを1つの要求に添付できます。ローカルのファイル・システムにあるイメージ・ファイルへの参照がHTMLドキュメントにある場合は、Attachmentユーティリティによって、これらのイメージ・ファイルも自動的に添付されます。次に、その使用方法の例を示します。

例8-4 HTMLドキュメントの添付のサンプル・コード

   Attachment m = new Attachment();
   m.addHtmlAttachment("/path/to/my.html");
     :
     :
 
   req.addProperty(DeliveryPropertyDefinitions.SMTP_ATTACHMENT, m);

8.2.4 電子メールの最上部への添付の表示

電子メールの最上部に添付を表示する場合は、プロパティのSMTP_ATTACHMENT_FIRSTを"true"に設定します。次に、その使用方法の例を示します。

例8-5 電子メールの最上部への添付の表示のサンプル・コード

   Attachment m = new Attachment();
   m.addHtmlAttachment("/path/to/my.html");
     :
     :
   req.addProperty(DeliveryPropertyDefinitions.SMTP_ATTACHMENT_FIRST, "true");
     :

8.2.5 電子メールの本文としてのStringオブジェクトの使用

電子メールの本文に、Stringオブジェクトを使用できます。この方法は、添付ファイルとともにメッセージを含める場合などに便利です。次のサンプル・コードでは、電子メールの本文としてメッセージ"Please find the attached invoice."が配信され、添付ファイルとして1つのPDFドキュメント"invoice.pdf"が配信されます。

例8-6 電子メールの本文としてのStringオブジェクトの使用のサンプル・コード

   // create delivery manager instance
   DeliveryManager dm = new DeliveryManager();
   // create a delivery request
   DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_SMTP_EMAIL);
 
   // set email subject
   req.addProperty(DeliveryPropertyDefinitions.SMTP_SUBJECT, "Invoice");
   // set SMTP server host
   req.addProperty(
     DeliveryPropertyDefinitions.SMTP_HOST, "mysmtphost");
   // set the sender email address
   req.addProperty(DeliveryPropertyDefinitions.SMTP_FROM, "myname@foobar.com.example");
   // set the destination email address
   req.addProperty(
     DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS, "user1@foobar.com.example, user2@foobar.com.example" );
   // set the document to deliver
   req.setDocument("Please find the attached invoice. ", "UTF-8");

   // create Attachment 
   Attachment m = new Attachment();
   // add attachments 
   m.addAttachment(
     "/pdf_doc/invoice.pdf",            // file to deliver
     "invoice.pdf",                     // file name appears in the email
     "application/pdf");                // content type
   // add the attachment to the request
   req.addProperty(DeliveryPropertyDefinitions.SMTP_ATTACHMENT, m);
 
   // submit the request
   req.submit();
   // close the request
   req.close();

     :
     :

8.2.6 電子メールの本文としてのHTMLドキュメントの使用

電子メールの本文には、HTMLドキュメントも使用できます。HTMLドキュメント内にあるローカル・イメージへの参照は、ユーティリティによって自動的に解決され、それらのイメージも添付されます。

次に、その使用方法の例を示します。

例8-7 電子メールの本文としてのHTMLドキュメントの使用のサンプル・コード

   // create delivery manager instance
   DeliveryManager dm = new DeliveryManager();
   // create a delivery request
   DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_SMTP_EMAIL);
 
   // set email subject
   req.addProperty(DeliveryPropertyDefinitions.SMTP_SUBJECT, "Invoice");
   // set SMTP server host
   req.addProperty(
     DeliveryPropertyDefinitions.SMTP_HOST, "mysmtphost");
   // set the sender email address
   req.addProperty(DeliveryPropertyDefinitions.SMTP_FROM, "myname@foobar.com.example");
   // set the destination email address
   req.addProperty(
     DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS, "user1@foobar.com.example, user2@foobar.com.example" );

   // set the content type of the email body
   req.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_TYPE, "text/html");
   // set the document file name appeared in the email
   req.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_FILENAME, "body.html");
   // set the document to deliver
   req.setDocument("/document/invoice.html");

   // submit the request
   req.submit();
   // close the request
   req.close();

     :
     :

8.2.7 認証用ユーザー名とパスワードの入力

SMTPサーバーが認証を必要とする場合は、要求の配信に使用するユーザー名とパスワードを指定できます。

例8-8 認証用ユーザー名とパスワードの入力のサンプル・コード

 :
   req.addProperty(DeliveryPropertyDefinitions.SMTP_USERNAME, "scott");
   req.addProperty(DeliveryPropertyDefinitions.SMTP_PASSWORD, "tiger");
     :

8.3 プリンタへのドキュメントの配信

配信マネージャでは、Internet Printing Protocol(IPP)がサポートされています。IPPはRFC 2910およびRFC 2911で定義され、CUPSなどのIPP対応プリンタまたはサーバーへのドキュメントの配信方法を規定しています。

Common Unix Printing System(CUPS)は、サーバー・タイプの無償の、IPPベースのソフトウェアで、IPP要求を受け取り、プリンタやFAXマシンなどの、IPPベースおよび非IPPベースの両方のデバイスにこれらの要求をディスパッチできます。CUPSの詳細は、 http://www.cups.org/を参照してください。

IPPを使用してドキュメントを印刷するには、ドキュメントを配信する前に、そのドキュメントをターゲットのIPPプリンタまたはサーバーが認識できる書式に変換する必要があります。たとえば、ターゲット・プリンタがPostscriptプリンタであれば、ドキュメントをPostscript書式に変換する必要があります。通常、プリンタでは、PDF、RTF、ExcelまたはWordドキュメントの書式がネイティブに処理されません。Delivery API自体にはドキュメントの書式変換機能はありませんが、この変換を実現する目的でドキュメント・フィルタがサポートされています。第8.16項「ドキュメント・フィルタのサポート」を参照してください。

次は、プリンタに配信するためのコード・サンプルです。

例8-9 プリンタへのドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
 
     // set IPP printer host
     req.addProperty(DeliveryPropertyDefinitions.IPP_HOST, "myhost");
     // set IPP printer port
     req.addProperty(DeliveryPropertyDefinitions.IPP_PORT, "631");
     // set IPP printer name
     req.addProperty(DeliveryPropertyDefinitions.IPP_PRINTER_NAME, "/printers/myprinter");
     // set the document format
     req.addProperty(DeliveryPropertyDefinitions.IPP_DOCUMENT_FORMAT, 
       DeliveryPropertyDefinitions.IPP_DOCUMENT_FORMAT_POSTSCRIPT);
     // set the document
     req.setDocument("/document/invoice.ps");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

次のプロパティがサポートされています。特別に指示されている場合を除き、各プロパティには文字列値が必要です。IPP_SIDES、IPP_COPIES、IPP_ORIENTATIONなどのプリンタ固有のプロパティは、そのプリンタの機能によって異なります。たとえば、ターゲット・プリンタで両面印刷がサポートされていない場合は、IPP_SIDESを設定しても効果はありません。

表8-2 プリンタへのドキュメントの配信のプロパティ

プロパティ 説明

IPP_HOST

必須

ホスト名を入力します。

IPP_PORT

オプション

デフォルトは631です。

IPP_PRINTER_NAME

必須

出力を受信するプリンタの名前を入力します。

  • CUPSをデフォルトの設定で使用する場合は、プリンタ名を/printers/<printer-name>の形式で入力します。

  • Microsoft Internet Information Service(IIS)をデフォルトの設定で使用する場合は、プリンタ名を/printers/<printer-name>/.printerの形式で入力します。

IPP_AUTHTYPE

オプション

認証タイプに有効な値は次のとおりです。

IPP_AUTHTYPE_NONE: 認証を行いません(デフォルト)

IPP_AUTHTYPE_BASIC: HTTP Basic認証を使用します

IPP_AUTHTYPE_DIGEST: HTTP Digest認証を使用します

IPP_USERNAME

オプション

HTTP認証に使用するユーザー名を入力します。

IPP_PASSWORD

オプション

HTTP認証に使用するパスワードを入力します。

IPP_ENCTYPE

オプション

暗号化タイプは、次のいずれかを設定できます。

IPP_ENCTYPE_NONE: 暗号化しない(デフォルト)

IPP_ENCTYPE_SSL: Secure Sockets Layerを使用します

IPP_USE_FULL_URL

オプション

"true"を設定すると、HTTP要求ヘッダーの完全なURLが送信されます。有効な値は"true"または"false"(デフォルト)です。

IPP_USE_CHUNKED_BODY

オプション

有効な値は"true"(デフォルト)または"false"です。"true"を設定すると、メッセージ本文のHTTPチャンク転送コーディングが使用されます。

IPP_ATTRIBUTE_CHARSET

オプション

IPP要求の属性キャラクタ・セットです。デフォルトは"UTF-8"です。

IPP_NATURAL_LANGUAGE

オプション

IPP要求の自然言語です。デフォルトは"en"です。

IPP_JOB_NAME

オプション

IPP要求のジョブ名です。

IPP_COPIES

オプション

印刷部数を定義します(例: "1"、"5"、"10")。デフォルトは1です。

IPP_SIDES

オプション

両面印刷を有効にします。ターゲット・プリンタで両面印刷がサポートされていない場合は、この設定は無視されます。有効な値は次のとおりです。

  • IPP_SIDES_ONE_SIDED: デフォルトです。

  • IPP_SIDES_TWO_SIDED_LONG_EDGE: 長辺綴じで用紙の両面に印刷します。

  • IPP_SIDES_TWO_SIDED_SHORT_EDGE: 短辺綴じで用紙の両面に印刷します。

  • IPP_SIDES_DUPLEX: IPP_SIDES_TWO_SIDED_LONG_EDGEと同じです。

  • IPP_SIDES_TUMBLE: IPP_SIDES_TWO_SIDED_SHORT_EDGEと同じです。

IPP_ORIENTATIONS

オプション

用紙の方向を設定します。ターゲット・プリンタで用紙の向きがサポートされていない場合は、この設定は無視されます。有効な値は次のとおりです。

IPP_ORIENTATIONS_PORTRAIT (デフォルト)

IPP_ORIENTATIONS_LANDSCAPE

IPP_DOCUMENT_FORMAT

オプション

ここで指定した書式は、ターゲット・プリンタでサポートされている必要があります。有効な値は次のとおりです。

IPP_DOCUMENT_FORMAT_POSTSCRIPT

IPP_DOCUMENT_FORMAT_PLAINTEXT

IPP_DOCUMENT_FORMAT_PDF

IPP_DOCUMENT_FORMAT_OCTETSTREAM (デフォルト)

IPP_MEDIA

用紙サイズまたはトレイ番号のどちらかを選択できます。このオプションを指定しない場合には、ターゲット・プリンタのデフォルトの用紙が使用されます。ターゲット・プリンタで用紙のオプションがサポートされていない場合、この設定は無視されます。有効な値は次のとおりです。

  • IPP_MEDIA_TRAY1: トレイ1の用紙

  • IPP_MEDIA_TRAY2: トレイ2の用紙

  • IPP_MEDIA_TRAY3: トレイ3の用紙

  • IPP_MEDIA_A3: A3用紙

  • IPP_MEDIA_A4: A4用紙

  • IPP_MEDIA_A5: A5用紙

  • IPP_MEDIA_B4: B4用紙

  • IPP_MEDIA_B5: B5用紙

IPP_PAGE_RANGES

印刷するページ範囲を指定します。デフォルトでは、すべてのページが印刷されます。次に、例を示します。

  • “3”: 3ページのみが印刷されます。

  • "2-5": 2ページから5ページまで印刷されます。

  • "1,3-5": 1ページと、3ページから5ページまで印刷されます。


8.3.1 HTTPプロキシ・サーバー経由での印刷

IPP対応のプリンタまたはFAXマシンにHTTPプロキシ・サーバー経由でドキュメントを配信する場合は、CUPSとプロキシ・サーバー間でのHTTP実装の相違が原因で、配信で問題が発生する場合があります。これらの問題の大半は、次の2つのプロパティを設定することで解決できます。

  • DeliveryPropertyDefinitions.IPP_USE_FULL_URL: "true"に設定します。

  • DeliveryPropertyDefinitions.IPP_USE_CHUNKED_BODY: "false"に設定します。

CUPSをデフォルトの設定で使用する場合は、一般的に次のようなプロパティ設定となります。

  • IPP_HOST: <host-name>

  • IPP_PORT: 631

  • IPP_PRINTER_NAME: /printers/<printer-name>

Microsoft Internet Information Service(IIS)をデフォルトの設定で使用する場合は、一般的に次のようなプロパティ設定となります。

  • IPP_HOST: <host-name>

  • IPP_PORT: 80

  • IPP_PRINTER_NAME: /printers/<printer-name>/.printer

8.4 ローカル・プリンタへのドキュメントの配信

配信マネージャでは、配信マネージャが実行しているシステムに取付けられているローカル・プリンタへのドキュメントの配信がサポートされています。

ローカル・プリンタに配信するためのコード・サンプルは、次のとおりです。

例8-10 ローカル・プリンタへのドキュメントの配信のサンプル・コード

      // create delivery manager instance
      DeliveryManager dm = new DeliveryManager();
      // create a delivery request
      DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_PRINTER);
      // set target printer name as HOST - if no HOST is set default printer is used
      //req.addProperty(PRINTER_HOST, "PrinterName");
      // set cotnent type – the content type must be supported by the printer
      req.addProperty(CONTENT_TYPE, CONTENT_TYPE_POSTSCRIPT);
      // set the document
      req.setDocument("/document/invoice.ps");
      // submit the request
      req.submit();
      // close the request
      req.close();

次の表に、サポートされているプロパティを示します。PRINTER_SIDES、PRINTER_COPIES、PRINTER_MEDIA、PRINTER_ORIENTATION、PRINTER_PAGE_RANGES、PRINTER_SIDESなどのプリンタ固有のプロパティへの対応は、プリンタとローカルの印刷システムの機能によって異なります。たとえば、Windowsではドキュメントにそれらのプロパティ追加をサポートするフィルタも使用する場合を除いて、そのようなプロパティは無視されます。

表8-3 ローカル・プリンタへのドキュメントの配信のプロパティ

プロパティ 説明

PRINTER_CONTENT_TYPE

オプション

ドキュメントのコンテンツ・タイプです(例: "application/pdf")。

PRINTER_COPIES

オプション

印刷部数を指定します(例: "1"、"5"、"10")。デフォルトは1です。

PRINTER_HOST

オプション

ドキュメントの配信先のプリンタ名(オペレーティング・システムまたはローカル印刷システム上のプリンタ名)です。HOSTが指定されていない場合、デフォルトのローカル・プリンタが使用されます。

PRINTER_MEDIA

オプション

用紙サイズまたはトレイ番号のどちらかを選択できます。このオプションを指定しない場合には、ターゲット・プリンタのデフォルトの用紙が使用されます。ターゲット・プリンタで用紙のオプションがサポートされていない場合、この設定は無視されます。

有効な値は次のとおりです。

  • PRINTER_MEDIA_TRAY1: トレイ1の用紙

  • PRINTER_MEDIA_TRAY2: トレイ2の用紙

  • PRINTER_MEDIA_TRAY3: トレイ3の用紙

  • PRINTER_MEDIA_A3: A3用紙

  • PRINTER_MEDIA_A4: A4用紙

  • PRINTER_MEDIA_A5: A5用紙

  • PRINTER_MEDIA_B4: B4用紙

  • PRINTER_MEDIA_B5: B5用紙

PRINTER_ORIENTATIONS

オプション

用紙の方向を設定します。ターゲット・プリンタで用紙の向きがサポートされていない場合は、この設定は無視されます。有効な値は、PRINTER_ORIENTATIONS_PORTRAIT(デフォルト)、PRINTER_ORIENTATIONS_LANDSCAPEです。

PRINTER_PAGE_RANGES

印刷するページ範囲を指定します。デフォルトでは、すべてのページが印刷されます。次に、例を示します。

  • “3”: 3ページのみが印刷されます。

  • "2-5": 2ページから5ページまで印刷されます。

  • "1,3-5": 1ページと、3ページから5ページまで印刷されます。

PRINTER_SIDES

オプション

両面印刷を有効にします。ターゲット・プリンタで両面印刷がサポートされていない場合は、この設定は無視されます。有効な値は次のとおりです。

  • PRINTER_SIDES_ONE_SIDED: デフォルトです。

  • PRINTER_SIDES_TWO_SIDED_LONG_EDGE: 長辺綴じで用紙の両面に印刷します。

  • PRINTER_SIDES_TWO_SIDED_SHORT_EDGE: 短辺綴じで用紙の両面に印刷します。

  • PRINTER_SIDES_DUPLEX: PRINTER_SIDES_TWO_SIDED_LONG_EDGEと同じです。

  • PRINTER_SIDES_TUMBLE: PRINTER_SIDES_TWO_SIDED_SHORT_EDGEと同じです。


8.5 Faxサーバーへのドキュメントの配信

配信マネージャでは、CUPS上に構成されたFAXモデムへのドキュメントの配信がサポートされています。CUPS上のFAXモデムをefaxで構成できます。efaxの詳細は、http://www.cce.com/efax/のWebサイトを参照してください。

FAX4CUPSは様々なWebサイトで自由に入手できます。FAX4CUPSをインターネット検索エンジンで検索し、このソフトウェアを提供しているサイトを探します。

次は、FAX配信を実行するためのサンプル・コードです。

例8-11 Faxサーバーへのドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_FAX);
 
     // set IPP fax host
     req.addProperty(DeliveryPropertyDefinitions.IPP_HOST, "myhost");
     // set IPP fax port
     req.addProperty(DeliveryPropertyDefinitions.IPP_PORT, "631");
     // set IPP fax name
     req.addProperty(DeliveryPropertyDefinitions.IPP_PRINTER_NAME, "/printers/myfax");
     // set the document format
     req.addProperty(DeliveryPropertyDefinitions.IPP_DOCUMENT_FORMAT, "application/postscript");
     // set the phone number to send
     req.addProperty(DeliveryPropertyDefinitions.IPP_PHONE_NUMBER, "9999999");
     // set the document
     req.setDocument("/document/invoice.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

サポートされているプロパティは、プリンタ・ドキュメントと同じプロパティと、次の固有のプロパティです。

表8-4 Faxサーバーへのドキュメントの配信のプロパティ

プロパティ 説明

IPP_PHONE_NUMBER

必須

Fax番号を入力します。


8.6 RightFaxサーバーへのドキュメントの配信

配信マネージャでは、Open Text Fax Server、RightFax Edition(旧Captaris RightFax) 9.3以上へのドキュメントの配信がサポートされています。この統合を有効にするには、HTTPポート上のXMLインタフェースをRightFaxサーバーで有効にする必要があります。

RightFaxサーバーに配信するためのコード・サンプルは、次のとおりです。

例8-12 RightFaxサーバーへのドキュメントの配信のサンプル・コード

// create delivery manager instance
DeliveryManager dm = new DeliveryManager();
// create a delivery request
DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_RIGHTFAX);
// set RightFax host
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_HTTP_HOST, "myhost");
// set RightFax server port
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_HTTP_PORT, "80");
// set the target remote directory
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_HTTP_REMOTE_DIRECTORY, "/RFWebCon.dll");
// sender information
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_SENDER_NAME, "Lex De Hann");
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_SENDER_COMPANY, "Company, Ltd.");
req.addproperty(DeliveryPropertyDefinitions.RIGHTFAX_SENDER_PHONE", "555-9976");
// destionation
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_TO_FAXNUM, "555-1111");
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_TO_NAME, "Jane Bennett");
req.addProperty(DeliveryPropertyDefinitions.RIGHTFAX_TO_COMPANY, "Acme, Inc.");
// set the document
req.setDocument("/document/invoice.pdf");
// submit the request
req.submit();
// close the request
req.close();

次の表に、サポートされているプロパティを示します。

表8-5 RightFaxサーバーへのドキュメントの配信のプロパティ

プロパティ 説明

RIGHTFAX_HTTP_HOST

必須

RightFaxサーバーのHTTPホスト。

RIGHTFAX_HTTP_PORT

オプション

RightFaxサーバーのHTTPポート。デフォルト = 80

RIGHTFAX_HTTP_REMOTE_DIRECTORY

オプション

RightFax XMLインタフェースのリモート・ディレクトリの名前を入力します(例: /RFWebCon.dll)。

RIGHTFAX_HTTP_AUTHTYPE

オプション

RightFaxサーバーのURLのHTTP認証タイプ。有効な値はRIGHTFAX_HTTP_AUTHTYPE_NONE、RIGHTFAX_HTTP_AUTHTYPE_BASIC、RIGHTFAX_HTTP_AUTHTYPE_DIGESTです。デフォルト値はRIGHTFAX_AUTHTYPE_NONEです。

RIGHTFAX_HTTP_USERNAME

オプション

RightFaxサーバーのURLのHTTPユーザー名。RIGHTFAX_HTTP_AUTH_TYPEがRIGHTFAX_HTTP_AUTHTYPE_NONE以外の値に設定されているときは必須。

RIGHTFAX_HTTP_PASSWORD

オプション

RightFaxサーバーのURLのHTTPパスワード。RIGHTFAX_HTTP_AUTH_TYPEがRIGHTFAX_HTTP_AUTHTYPE_NONE以外の値に設定されているときは必須。

RIGHTFAX_HTTP_ENCTYPE

オプション

暗号化タイプを次のいずれかに設定できます。RIGHTFAX_HTTP_ENCTYPE_NONE: 暗号化しない(デフォルト)、RIGHTFAX_HTTP_ENCTYPE_SSL: Secure Socket Layerを使用

RIGHTFAX_HTTP_USE_FULL_URL

オプション

"true"を設定すると、HTTP要求ヘッダーの完全なURLが送信されます。有効な値は"true"または"false"(デフォルト)です。

RIGHTFAX_HTTP_USE_CHUNKED_BODY

オプション

有効な値は"true"(デフォルト)または"false"です。"true"を設定すると、メッセージ本文のHTTPチャンク転送コーディングが使用されます。

RIGHTFAX_HTTP_TIMEOUT

オプション

HTTPサーバーへの接続が確立されるまで待機する時間(要求の強制終了待ち時間)をミリ秒単位で入力します。デフォルトは60000(1分)です。

RIGHTFAX_HTTP_PROXY_HOST

オプション

プロキシ・サーバーのホスト名を入力します。

RIGHTFAX_HTTP_PROXY_PORT

オプション

プロキシ・サーバーのポート番号を入力します。デフォルト = 80

RIGHTFAX_HTTP_PROXY_AUTHTYPE

オプション

有効な値は次のいずれかです。RIGHTFAX_HTTP_PROXY_AUTHTYPE_NONE: 認証なし。RIGHTFAX_HTTP_PROXY_AUTHTYPE_BASIC: HTTP Basic認証を使用。RIGHTFAX_HTTP_PROXY_AUTHTYPE_DIGEST: HTTP Digest認証を使用。

RIGHTFAX_HTTP_PROXY_USERNAME

オプション

プロキシ認証に使用するユーザー名を入力します。

RIGHTFAX_HTTP_PROXY_PASSWORD

オプション

HTTPプロキシ認証に使用するパスワードを入力します。

RIGHTFAX_SENDER_FROM_NAME

オプション

送信者の名前を入力します。

RIGHTFAX_SENDER_EMP_ID

オプション

送信者の従業員IDを入力します。

RIGHTFAX_SENDER_FROM_COMPANY

オプション

送信者の会社の名前を入力します。

RIGHTFAX_SENDER_FROM_DEPARTMENT

オプション

送信者の所属部門の名前を入力します。

RIGHTFAX_SENDER_FROMO_PHONE

オプション

送信者の電話番号を入力します。

RIGHTFAX_SENDER_RETURN_EMAIL

オプション

送信者の返信用電子メール・アドレスを入力します。

RIGHTFAX_SENDER_BILLINFO1

オプション

Fax所有者の請求書コードを入力します。

RIGHTFAX_SENDER_BILLINFO2

オプション

Fax所有者の2次請求書コードを入力します。

RIGHTFAX_SENDER_RF_USER

必須

送信者のRightFaxユーザー名を入力します。

RIGHTFAX_FAX_TO_NUMBER

必須

ドキュメントの送信先のFax番号を入力します。

RIGHTFAX_FAX_TO_NAME

オプション

受信者の名前を入力します。

RIGHTFAX_FAX_TO_COMPANY

オプション

受信者の会社の名前を入力します。

RIGHTFAX_FAX_ALT_FAX_NUM

オプション

別のFax番号を入力します。

RIGHTFAX_FAX_TO_CONTACTNUM

オプション

受信者の連絡先の電話番号を入力します。

RIGHTFAX_FAX_COVERSHEET

オプション

現行のドキュメントに対応する表紙のテンプレートを入力します。ファイル名はRightFaxサーバー・コンピュータのフルパスか、RightFax\Production\Coversへの相対パスのいずれかを使用できます。

RIGHTFAX_COVERTEXT

オプション

表紙に表示されるテキストを入力します。

RIGHTFAX_COVERTEXT_TYPE

オプション

表紙のテキストのタイプを入力します。有効な値は次のとおりです。

  • TXT (デフォルト)

  • RTF

RIGHTFAX_COVERTEXT_ENCODING

オプション

表紙のテキストのエンコーディングを入力します。有効な値は次のとおりです。

  • NONE (デフォルト)

  • BASE64

  • QUOTEDPRINTABLE

RIGHTFAX_DOCUMENT_FORMAT

オプション

有効な値は次のとおりです。

  • PDF (デフォルト)

  • PS

  • TEXT


8.7 WebDAVサーバーへのドキュメントの配信

次は、Web-based Distributed Authoring and Versioning(WebDAV)サーバーに配信するためのサンプル・コードです。

例8-13 WebDAVサーバーへのドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_WEBDAV);
 
     // set document content type
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_CONTENT_TYPE, "application/pdf");
     // set the WebDAV server hostname
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_HOST, "mywebdavhost");
     // set the WebDAV server port number
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_PORT, "80");
     // set the target remote directory
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_REMOTE_DIRECTORY, "/content/");
     // set the remote filename
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_REMOTE_FILENAME, "xdotest.pdf");
  
     // set username and password to access WebDAV server
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_USERNAME, "xdo");
     req.addProperty(DeliveryPropertyDefinitions.WEBDAV_PASSWORD, "xdo");
     // set the document
     req.setDocument("/document/test.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

次のプロパティがサポートされています。特別に指示されている場合を除き、各プロパティには文字列値が必要です。

表8-6 WebDAVサーバーへのドキュメントの配信のプロパティ

プロパティ 説明

WEBDAV_CONTENT_TYPE

必須

ドキュメントのコンテンツ・タイプを入力します(例: "application/pdf")。

WEBDAV_HOST

必須

サーバーのホスト名を入力します。

WEBDAV_PORT

オプション

サーバーのポート番号を入力します。

デフォルトは80です。

WEBDAV_REMOTE_DIRECTORY

必須。

リモート・ディレクトリの名前を入力します(例: "/myreports/")。

WEBDAV_REMOTE_FILENAME

必須。

リモート・ファイルの名前を入力します。

WEBDAV_AUTHTYPE

オプション

認証タイプに有効な値は次のとおりです。

WEBDAV_AUTHTYPE_NONE: 認証を行いません(デフォルト)

WEBDAV_AUTHTYPE_BASIC: HTTP Basic認証を使用します

WEBDAV_AUTHTYPE_DIGEST: HTTP Digest認証を使用します

WEBDAV_USERNAME

オプション

HTTP認証に使用するユーザー名を入力します。

WEBDAV_PASSWORD

オプション

HTTP認証に使用するパスワードを入力します。

WEBDAV_ENCTYPE

オプション

暗号化タイプに有効な値は次のとおりです。

WEBDAV_ENCTYPE_NONE: 暗号化を行いません(デフォルト)

WEBDAV_ENCTYPE_SSL: Secure Sockets Layerを使用します

WEBDAV_USE_FULL_URL

オプション

"true"を設定すると、HTTP要求ヘッダーの完全なURLが送信されます。有効な値は"true"または"false"(デフォルト)です。

WEBDAV_USE_CHUNKED_BODY

オプション

有効な値は"true"(デフォルト)または"false"です。"true"を設定すると、メッセージ本文のHTTPチャンク転送コーディングが使用されます。

WEBDAV_URL_CHARACTER_ENCODING

URLのエンコーディングです。URLでASCII以外の文字セットを使用すると、このプロパティが使用されます。Javaがサポートするエンコーディング文字列を値に設定します。


8.8 ファイル転送プロトコル(FTP)によるドキュメントの配信

FTPサーバーに配信するためのコード・サンプルは、次のとおりです。

例8-14 FTPによるドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_FTP);
 
     // set hostname of the FTP server
     req.addProperty(DeliveryPropertyDefinitions.FTP_HOST, "myftphost");
     // set port# of the FTP server
     req.addProperty(DeliveryPropertyDefinitions.FTP_PORT, "21");
     // set username and password to access WebDAV server
     req.addProperty(DeliveryPropertyDefinitions.FTP_USERNAME, "xdo");
     req.addProperty(DeliveryPropertyDefinitions.FTP_PASSWORD, "xdo");
     // set the remote directory that you want to send your document to
     req.addProperty(DeliveryPropertyDefinitions.FTP_REMOTE_DIRECTORY, "pub");
     // set the remote file name 
     req.addProperty(DeliveryPropertyDefinitions.FTP_REMOTE_FILENAME, "test.pdf");
     // set the document
     req.setDocument("/document/test.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

次のプロパティがサポートされています。特別に指示されている場合を除き、各プロパティには文字列値が必要です。

表8-7 FTPによるドキュメントの配信のプロパティ

プロパティ 説明

FTP_HOST

必須

サーバーのホスト名を入力します。

FTP_PORT

オプション

サーバーのポート番号を入力します。デフォルトは21です。

FTP_USERNAME

必須

FTPサーバーへのログイン・ユーザー名を入力します。

FTP_PASSWORD

必須

FTPサーバーへのログイン・パスワードを入力します。

FTP_REMOTE_DIRECTORY

必須

ドキュメントの配信先ディレクトリを入力します(例: /pub/)。

FTP_REMOTE_FILENAME

必須

リモート・サーバーのドキュメント・ファイルの名前を入力します。

FTP_BINARY_MODE

オプション

有効な値はtrue(デフォルト)とfalseです。

FTP_PASSIVE_MODE

オプション

有効な値は"true"または"false"(デフォルト)です。


8.9 Secure FTPによるドキュメントの配信

Secure FTPはSecure Shellテクノロジ(ssh)に基づいたプロトコルで、セキュアな方式でのファイル転送に幅広く使用されます。Secure ShellとSecure FTPはともにInternet Engineering Task Force(IETF)により定義されており、その仕様はIETFのWebサイト(http://www.ietf.org)から入手できます。配信システムでは、Secure FTPサーバーへのドキュメントの配信がサポートされています。

次の表に、サポートされているプロパティを示します。特別に指示されている場合を除き、各プロパティには文字列値が必要です。

例8-15 SFTPによるドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_SFTP);
     // set hostname of the SFTP server
     req.addProperty(DeliveryPropertyDefinitions.SFTP_HOST, "mysftphost");
     // set username and password to access server
     req.addProperty(DeliveryPropertyDefinitions.SFTP_USERNAME, "myname");
     req.addProperty(DeliveryPropertyDefinitions.SFTP_PASSWORD, "mypassword");
     // set the remote directory that you want to send your document to
     req.addProperty(DeliveryPropertyDefinitions.SFTP_REMOTE_DIRECTORY, "pub");
     // set the remote file name 
     req.addProperty(DeliveryPropertyDefinitions.SFTP_REMOTE_FILENAME, "test.pdf");
     // set the document
     req.setDocument("/document/test.pdf");
     
     // submit the request
     req.submit();
     // close the request
     req.close();

表8-8 SFTPによるドキュメントの配信のプロパティ

プロパティ 説明

SFTP_HOST

必須

ターゲット・サーバーのホスト名を入力します。

SFTP_PORT

オプション

ターゲット・サーバーのSSHポート番号を入力します。デフォルトは22です。

SFTP_USERNAME

必須

ログイン・ユーザー名を入力します。

SFTP_PASSWORD

SFTP_AUTH_TYPE_PASSWORD認証タイプを選択した場合は必須。

ログイン・パスワードを入力します。

SFTP_REMOTE_DIRECTORY

必須

ドキュメントの配信先ディレクトリを入力します(例: /pub/)。値を指定しない場合、ドキュメントはログイン・ディレクトリに配信されます。

SFTP_REMOTE_FILENAME

必須

リモート・サーバーのドキュメント・ファイルの名前を入力します。

SFTP_AUTH_TYPE

次のどちらかを設定します。

SFTP_AUTH_TYPE_PASSWORD(デフォルト): ログイン時にパスワードの入力が必須です。

SFTP_AUTH_TYPE_PUBLIC_KEY: 公開鍵認証タイプです。

SFTP_PRIVATE_KEY_FILE

クライアントの秘密鍵ファイルを入力します。SFTP_AUTH_TYPE_PUBLIC_KEYを選択した場合は必須です。

SFTP_PRIVATE_KEY_PASSWORD

クライアントの秘密鍵のパスワードを入力します。SFTP_AUTH_TYPE_PUBLIC_KEYを選択した場合は必須です。

SFTP_FILE_PERMISSION

作成されるファイルに設定する権限を入力します。デフォルトは0755です。


8.9.1 認証モード

Secure FTPによる配信では、パスワード認証と公開鍵認証の2タイプの認証モードがサポートされています。SFTP_AUTH_TYPEプロパティを設定してモードを選択します。デフォルトのモードはパスワード認証です。

パスワード認証モードでは、Secure FTPサーバーにログインするためのユーザー名とパスワードが必要です。次に、サンプル・コードを示します。

例8-16 パスワード認証のサンプル・コード

:
         :
     // set password auth type
      req.addProperty(DeliveryPropertyDefinitions.SFTP_AUTH_TYPE, 
                      DeliveryPropertyDefinitions.SFTP_AUTH_TYPE_PASSWORD);
      // set username and password to access server
      req.addProperty(DeliveryPropertyDefinitions.SFTP_USERNAME, "myname");
      req.addProperty(DeliveryPropertyDefinitions.SFTP_PASSWORD, "mypassword");
         :
         :

公開鍵認証モードでは、ユーザー名、秘密鍵および秘密鍵のパスワードが必要です。これはパスワード認証よりもよりセキュアな方法です。公開鍵認証モードを使用するには、事前にssh/secure FTPサーバーに公開鍵を設定する必要があることに注意してください。次に、サンプル・コードを示します。

例8-17 公開鍵認証のサンプル・コード

         :
         :
      // set public key auth type
      req.addProperty(DeliveryPropertyDefinitions.SFTP_AUTH_TYPE, 
                      DeliveryPropertyDefinitions.SFTP_AUTH_TYPE_PUBLIC_KEY);
      // set username 
      req.addProperty(DeliveryPropertyDefinitions.SFTP_USERNAME, "myname");
      // set the client's private key file
      req.addProperty(DeliveryPropertyDefinitions.SFTP_PRIVATE_KEY_FILE,
                      "/path/to/the/key");
      // set the client's private key password
      req.addProperty(DeliveryPropertyDefinitions.SFTP_PRIVATE_KEY_PASSWORD, "myPrivateKeyPass");         
         :
         :

8.10 Hypertext Transfer Protocol(HTTP)によるドキュメントの配信

配信マネージャでは、HTTPサーバーへのドキュメントの配信がサポートされています。次のサンプルでは、HTTP POSTメソッドを使用してドキュメントを送信します。受信側のHTTPサーバーが、事前に、カスタムなHTTP要求を(カスタムなサーブレットやCGIプログラムなどを介して)受入れ可能に構成されている必要があることに注意してください。

例8-18 HTTPによるドキュメントの配信のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_HTTP);
 
     // set request method 
     req.addProperty(DeliveryPropertyDefinitions.HTTP_METHOD, DeliveryPropertyDefinitions.HTTP_METHOD_POST);
     // set document content type
     req.addProperty(DeliveryPropertyDefinitions.HTTP_CONTENT_TYPE, "application/pdf");
     // set the HTTP server hostname
     req.addProperty(DeliveryPropertyDefinitions.HTTP_HOST, "myhost");
     // set the HTTP server port number
     req.addProperty(DeliveryPropertyDefinitions.HTTP_PORT, "80");
     // set the target remote directory
     req.addProperty(DeliveryPropertyDefinitions.HTTP_REMOTE_DIRECTORY, "/servlet/");
     // set the remote filename (servlet class)
     req.addProperty(DeliveryPropertyDefinitions.HTTP_REMOTE_FILENAME, "uploadDocument");
  
     // set the document
     req.setDocument("/document/test.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

次の表に、サポートされているプロパティを示します。特別に指示されている場合を除き、各プロパティには文字列値が必要です。

表8-9 HTTPによるドキュメントの配信のプロパティ

プロパティ 説明

HTTP_METHOD

オプション

HTTP要求メソッドを設定します。有効な値は次のとおりです。

HTTP_METHOD_POST (デフォルト)

HTTP_METHOD_PUT

HTTP_CONTENT_TYPE

オプション

ドキュメントのコンテンツ・タイプです(例: "application/pdf")。

HTTP_HOST

必須

サーバーのホスト名を入力します。

HTTP_PORT

オプション

サーバーのポート番号を入力します。デフォルトは80です。

HTTP_REMOTE_DIRECTORY

必須

リモート・ディレクトリの名前を入力します(例: "/home/")。

HTTP_REMOTE_FILENAME

必須

ドキュメントの保存先ファイル(リモート・ディレクトリ内)の名前を指定します。

HTTP_AUTHTYPE

オプション

認証タイプに有効な値は次のとおりです。

HTTP_AUTHTYPE_NONE: 認証を行いません(デフォルト)

HTTP_AUTHTYPE_BASIC: HTTP Basic認証を使用します

HTTP_AUTHTYPE_DIGEST: HTTP Digest認証を使用します

HTTP_USERNAME

オプション

サーバーが認証を必要とする場合は、ユーザー名を入力します。

HTTP_PASSWORD

オプション

サーバーが認証を必要とする場合は、ユーザー名に対応するパスワードを入力します。

HTTP_ENCTYPE

オプション

次の暗号化タイプを入力します。

HTTP_ENCTYPE_NONE: 暗号化しません(デフォルト)

HTTP_ENCTYPE_SSL: Secure Sockets Layerを使用します

HTTP_USE_FULL_URL

オプション

"true"を設定すると、HTTP要求ヘッダーの完全なURLが送信されます。有効な値は"true"または"false"(デフォルト)です。

HTTP_USE_CHUNKED_BODY

オプション

有効な値は"true"(デフォルト)または"false"です。"true"を設定すると、メッセージ本文のHTTPチャンク転送コーディングが使用されます。

HTTP_TIMEOUT

オプション

HTTPサーバーへの接続が確立されるまで待機する時間(要求の強制終了待ち時間)をミリ秒単位で入力します。デフォルトは60000(1分)です。

HTTP_URL_CHARACTER_ENCODING

URLのエンコーディングです。URLでASCII以外の文字セットを使用すると、このプロパティが使用されます。Javaがサポートするエンコーディング文字列を値に設定します。


8.11 AS2によるドキュメントの配信

AS2は、Electronic Data Interchange-Internet Integration(EDI-INT)で定義されている標準プロトコルの1つです。AS2は、HTTPとその他のインターネット標準テクノロジをベースとし、インターネットを介してセキュアなデータ交換を行うために設計されています。AS2の仕様はRFC4130(http://www.ietf.org/で入手可能)で定義されています。配信システムでは、AS2サーバーへのドキュメントの配信がサポートされています。サンプル・コードは次のとおりです。

例8-19 AS2によるドキュメントの配信のサンプル・コード

// create delivery manager instance
    DeliveryManager dm = new DeliveryManager();
    // create a delivery request
    DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_AS2);
 
    // set AS2 message properties 
    req.addProperty(DeliveryPropertyDefinitions.AS2_FROM, "Me");
    req.addProperty(DeliveryPropertyDefinitions.AS2_TO, "You");
    req.addProperty(DeliveryPropertyDefinitions.AS2_SUBJECT, "My EDI Message");
    req.addProperty(DeliveryPropertyDefinitions.AS2_CONTENT_TYPE, "applications/EDIFACT");
 
    // set HTTP properties
    req.addProperty(DeliveryPropertyDefinitions.AS2_HTTP_HOST, "as2hsot");
    req.addProperty(DeliveryPropertyDefinitions.AS2_HTTP_REMOTE_DIRECTORY, "/");
    req.addProperty(DeliveryPropertyDefinitions.AS2_HTTP_REMOTE_FILENAME, "as2");
 
    // set the document
    req.setDocument("/document/myEDIdoc");
    // submit the request
    DeliveryResponse res = req.submit();
    // close the request
    req.close();

次の表に、サポートされているプロパティを示します。特別に指示されている場合を除き、各プロパティには文字列値が必要です。

表8-10 AS2によるドキュメントの配信のプロパティ

プロパティ 説明

AS2_FROM

必須。

AS2メッセージの送信者を入力します。

AS2_TO

必須。

AS2メッセージの受信者を入力します。

AS2_SUBJECT

必須。

メッセージの件名を入力します。

AS2_MESSAGE_COMPRESSION

デフォルト値はFalseです。メッセージを圧縮する場合はTrueを入力します。

AS2_MESSAGE_SIGNATURE

デフォルト値はFalseです。メッセージに署名する場合はTrueを入力します。

AS2_MESSAGE_ENCRYPTION

デフォルト値はFalseです。メッセージを暗号化する場合はTrueを入力します。

AS2_CONTENT_TYPE

必須。

ドキュメントのコンテンツ・タイプを入力します。有効な値は次のとおりです。

  • application/EDIFACT

  • application/xml

AS2_ENC_ALGO

AS2暗号化アルゴリズムです。次のいずれかを設定します。

  • AS2_ENC_ALGO_RC2_40

  • AS2_ENC_ALGO_RC2_64

  • AS2_ENC_ALGO_RC2_128

  • AS2_ENC_ALGO_DES

  • AS2_ENC_ALGO_DES_EDE3(デフォルト)

  • AS2_ENC_ALGO_AES_128

  • AS2_ENC_ALGO_AES_192

  • AS2_ENC_ALGO_AES_256

AS2_DIGEST_ALGO

メッセージの署名に使用するAS2ダイジェスト・アルゴリズムを入力します。次のどちらかを設定します。

  • AS2_DIGEST_ALGO_MD5(デフォルト)

  • AS2_DIGEST_ALGO_SHA1

AS2_ASYNC_ADDRESS

MDN通知を受信する非同期アドレスを入力します。

AS2_ASYNC_EMAIL_SERVER_HOST

非同期MDNの電子メールに使用する電子メール・サーバーのホストを入力します。

AS2_ASYNC_EMAIL_SERVER_PORT

非同期MDNの電子メールに使用する電子メール・サーバーのポートを入力します。

AS2_ASYNC_EMAIL_SERVER_USERNAME

非同期MDNの電子メールに使用する電子メール・サーバーのユーザー名を入力します。

AS2_ASYNC_EMAIL_SERVER_PASSWORD

非同期MDNの電子メールに使用する電子メール・サーバーのパスワードを入力します。

AS2_ASYNC_EMAIL_SERVER_FOLDER_NAME

非同期MDNの電子メールに使用するIMAPフォルダの名前を入力します。

AS2_SENDER_PKCS12_FILE

送信者のPKCS12(公開鍵と秘密鍵)ファイルの場所です。

AS2_SENDER_PKCS12_PASSWORD

送信者のPKCS12(公開鍵と秘密鍵)のパスワードです。

AS2_RECEIVER_CERTIFICATES_FILE

受信者の証明書ファイルの場所です。

AS2_DELIVERY_RECEIPT_DIRECTORY

配信通知の格納先ディレクトリです。配信通知を受信する場合は、このディレクトリを指定する必要があります。

AS2_HTTP_HOST

必須。

サーバーのホスト名を入力します。

AS2_HTTP_PORT

サーバーのHTTPポート番号を入力します。デフォルトは80です。

AS2_HTTP_REMOTE_DIRECTORY

必須。

リモート・ディレクトリの名前を入力します(例: /home/)

AS2_HTTP_REMOTE_FILENAME

必須。

リモート・ファイルの名前を入力します。

AS2_HTTP_AUTHTYPE

HTTP認証タイプを入力します。有効な値は次のとおりです。

  • AS2_HTTP_AUTHTYPE_NONE: 認証を行いません(デフォルト)。

  • AS2_HTTP_AUTHTYPE_BASIC: HTTP Basic認証を使用します。

  • AS2_HTTP_AUTHTYPE_DIGEST: HTTP Digest認証を使用します。

AS2_HTTP_USERNAME

HTTP認証に使用するユーザー名を入力します。

AS2_HTTP_PASSWORD

HTTP認証に使用するパスワードを入力します。

AS2_HTTP_ENCTYPE

暗号化タイプを設定します。有効な値は次のとおりです。

  • AS2_HTTP_ENCTYPE_NONE: 暗号化しない(デフォルト)。

  • AS2_HTTP_ENCTYPE_SSL: Secure Sockets Layer(SSL)を使用。

AS2_HTTP_TIMEOUT

タイムアウト待ち時間をミリ秒単位で入力します。デフォルトは60,000(1分)です

AS2_HTTP_PROXY_HOST

必須。

プロキシ・サーバーのホスト名を入力します。

AS2_HTTP_PROXY_PORT

プロキシ・サーバーのポート番号を入力します。デフォルトは80です。

AS2_HTTP_PROXY_AUTHTYPE

  • AS2_HTTP_AUTHTYPE_NONE: 認証を行いません(デフォルト)。

  • AS2_HTTP_AUTHTYPE_BASIC: HTTP Basic認証を使用します。

  • AS2_HTTP_AUTHTYPE_DIGEST: HTTP Digest認証を使用します。

AS2_HTTP_PROXY_USERNAME

プロキシ認証に使用するユーザー名を入力します。

AS2_HTTP_PROXY_PASSWORD

HTTPプロキシ認証に使用するパスワードを入力します。


8.11.1 >配信通知

AS2サーバーは、AS2配信通知を各AS2要求に対して必ず発行します。AS2_DELIVERY_RECEIPT_DIRECTORYプロパティを設定し、配信通知を格納する場所を指定します。このディレクトリを指定しない場合、配信通知は無視されます。配信通知の格納先ディレクトリを設定するサンプル・コードは次のとおりです。

例8-20 配信通知の格納先ディレクトリを設定するサンプル・コード

         :
         :
 // Set the delivery receipt directory
 req.addProperty(DeliveryPropertyDefinitions.AS2_DELIVERY_RECEIPT_DIRECTORY, "/my/receipt/dir");
         :
         :

8.11.2 同期

AS2サーバーに送信する配信要求は、同期または非同期にできます。デフォルトでは、要求は同期して送信されるため、Message Disposition Notification(MDN)をただちにDeliveryResponseで確認できます。

AS2_ASYNC_ADDRESSを要求に対して設定すると、要求は非同期になります。要求処理後の配信通知の受信先として、HTTP URLまたは電子メール・アドレスを指定できます。配信通知を受信するには、HTTPサーバーまたは電子メール・アドレスを設定する必要があります。

AS2_ASYNC_ADDRESSに電子メール・アドレスを設定した場合は、Delivery APIを使用して、非同期要求を追跡できます。Delivery APIに電子メール・アカウントの情報を指定すると、Delivery APIによって電子メール・アカウントが定期的にチェックされ、配信通知が取得されます。サンプル・コードは次のとおりです。

例8-21 非同期の配信要求送信のサンプル・コード

         :
         :
 // Set the email address - async request
 req.addProperty(DeliveryPropertyDefinitions.AS2_ASYNC_ADDRESS, "async_target@acme.com");

 // Set the delivery receipt directory
 req.addProperty(DeliveryPropertyDefinitions.AS2_DELIVERY_RECEIPT_DIRECTORY, "/my/receipt/dir");
  
 // Set the email server information where the delivery receipt will be delivered to. 
 req.addProperty(
     DeliveryPropertyDefinitions.AS2_ASYNC_EMAIL_SERVER_HOST, "mail.acme.com");
 req.addProperty(
     DeliveryPropertyDefinitions.AS2_ASYNC_EMAIL_SERVER_USERNAME, "async_target");
 req.addProperty(
     DeliveryPropertyDefinitions.AS2_ASYNC_EMAIL_SERVER_PASSWORD, "mypassword");
 req.addProperty(
     DeliveryPropertyDefinitions.AS2_ASYNC_EMAIL_SERVER_FOLDER_NAME, "inbox");
  
 // set the document
 req.setDocument("/document/myEDIdoc");
    
 // submit the request with the DeliveryResponseListener 
 req.submit(myDeliveryListener);
        :
        :

配信要求を追跡するには、前述のコード例に示すように、Delivery APIの非同期配信要求メカニズムを使用する必要があることに注意してください。第8.15項「非同期の配信要求」を参照してください。

8.11.3 ドキュメントの署名

Delivery APIによりドキュメントに署名してトランザクションをセキュアにできます。この機能は公開鍵アーキテクチャに基づくため、次の設定が必要になります。

  • 送信者側: 送信者の公開鍵と秘密鍵

    送信者は、送信者の公開鍵と秘密鍵をPKCS12標準ファイルに所持している必要があります。ファイルの拡張子は.p12です。このファイルを、Delivery APIを実行するローカル・システムに配置します。

  • 受信者側(AS2サーバー側): 送信者の公開鍵証明書

    受信者は、送信者の公開鍵証明書を所持している必要があります。AS2サーバーへの証明書のインストール方法は、サーバーによって異なります。一般的に、.der証明書または.cer証明書を特定の場所にコピーする必要があります。手順の詳細は、ご使用のAS2サーバーのマニュアルを参照してください。

設定が完了したら、配信要求においてプロパティを設定してドキュメントに署名できます。サンプル・コードは次のとおりです。

例8-22 署名ドキュメントのサンプル・コード

        :
        :
 // Signing the document
 req.addProperty(DeliveryPropertyDefinitions.AS2_MESSAGE_SIGNATURE, "true");
 req.addProperty(DeliveryPropertyDefinitions.AS2_SENDER_PKCS12_FILE, "/path/to/mykey.p12");
 req.addProperty(DeliveryPropertyDefinitions.AS2_SENDER_PKCS12_PASSWORD, "welcome");
        :
        :

8.11.4 ドキュメントの暗号化

Delivery APIによりドキュメントを暗号化してトランザクションをセキュアにできます。この機能は公開鍵アーキテクチャに基づくため、次の設定が必要になります。

  • 送信者側: 受信者の公開鍵証明書

    送信者側は、受信者の公開鍵証明書ファイルを所持している必要があります。ファイルの拡張子は.derまたは.cerです。このファイルを、Delivery APIを実行するローカル・システムに配置します。AS2サーバーの公開鍵証明書を取得する手順の詳細は、ご使用のAS2サーバーのマニュアルを参照してください。

  • 受信者側(AS2サーバー側): 受信者の公開鍵と秘密鍵

    受信者側(AS2サーバー)は、受信者の公開鍵と秘密鍵を所持している必要があります。これらの鍵の設定手順の詳細は、ご使用のAS2サーバーのマニュアルを参照してください。

設定が完了したら、配信要求においてプロパティを設定してドキュメントを暗号化できます。サンプル・コードは次のとおりです。

例8-23 暗号化ドキュメントのサンプル・コード

        :
        :
 // Encrypting the document
 req.addProperty(DeliveryPropertyDefinitions.AS2_MESSAGE_ENCRYPTION, "true");
 req.addProperty(DeliveryPropertyDefinitions.AS2_RECEIVER_CERTIFICATES_FILE,  "/path/to/server-certificate.der");
        :
        :

8.12 外部コマンドによるドキュメントの配信

Delivery APIでは、外部(つまりオペレーティング・システム(OS))のネイティブ・コマンドを使用してドキュメントを配信する機能がサポートされています。

OSのネイティブ・コマンドは、{file}プレースホルダとともに指定します。実行時に、このプレースホルダがドキュメントのファイル名に置換されます。

配信のステータスは、OSコマンドのexit値によって決まります。この値が0の場合、要求は成功とみなされます。

サンプル・コードは次のとおりです。

例8-24 外部コマンドよるドキュメントの配信のサンプル・コード

     // create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_EXTERNAL);
     // set the OS native command for delivery
     req.addProperty(DeliveryPropertyDefinitions.EXTERNAL_DELIVERY_COMMAND,
     "/usr/bin/lp -d myprinter {file}");
     // set the document
     req.setDocument("/document/test.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

DeliveryPropertyDefinitionsには、次のプロパティがサポートされ定義されています。

表8-11 外部コマンドよるドキュメントの配信のプロパティ

プロパティ 説明

EXTERNAL_DELIVERY_COMMAND

必須。

配信に使用するOSネイティブ・コマンドを入力します。


8.13 ローカル・ファイル・システムへのドキュメントの配信

Delivery APIでは、Delivery APIが実行しているローカル・ファイル・システムへのドキュメントの配信がサポートされています。このコマンドにより、指定されたファイルが指定された場所にコピーされます。

次のサンプル・コードにより、/document/test.pdfファイルが/destination/document.pdfにコピーされます。

例8-25 ローカル・ファイル・システムへのドキュメントの配信のサンプル・コード

     // create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_LOCAL);
     // set the document destination in the local filesystem.
     req.addProperty(DeliveryPropertyDefinitions.LOCAL_DESTINATION, "/destination/document.pdf");
     // set the document to deliver.
     req.setDocument("/document/test.pdf");
 
     // submit the request
     req.submit();
     // close the request
     req.close();

DeliveryPropertyDefinitionsには、次のプロパティがサポートされ定義されています。

表8-12 ローカル・ファイル・システムへのドキュメントの配信のプロパティ

プロパティ 説明

LOCAL_DESTINATION

必須。

ローカル・ファイル・システムにおけるコピー先ファイルの名前へのフルパスです。


8.14 ダイレクト・モードとバッファリング・モード

配信システムでは、ダイレクト・モードとバッファリング・モードの2種類の配信モードがサポートされています。バッファリング・モードがデフォルトです。

8.14.1 ダイレクト・モード

ダイレクト・モードにより、完全にストリームライン化した配信処理が実現します。ドキュメントは、宛先に直接接続された接続ストリームに配信されます。このモードは高速なので、メモリーとディスク・スペースの使用量を抑えます。これは、オンライン対話型処理で使用することをお薦めします。

ダイレクト・モードを設定するには、BUFFERING_MODEプロパティを"false"に設定します。次に、そのコード・サンプルを示します。

例8-26 ダイレクト・モード設定のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
 
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
 
     // set the direct mode  
     req.addProperty(DeliveryPropertyDefinitions.BUFFERING_MODE, "false");
           :
           :
           :

このモードでは、ドキュメントの再配信はサポートされていません。再配信が必要な場合は、バッファリング・モードを使用します。

8.14.2 バッファリング・モード

バッファリング・モードでは、何度でもドキュメントを再配信できます。一時ディレクトリ(ds-temp-dir)を配信サーバー構成ファイルで指定すると、配信システムでは、一時ファイルを使用してドキュメントがバッファされます。一時ディレクトリを指定しない場合、配信システムでは一時メモリー・バッファが使用されます。一時ディレクトリを定義することをお薦めします。この構成ファイルの詳細は、第8.21項「構成ファイルのサポート」を参照してください。

配信要求の終了後に、DeliveryRequest.close()をコールして、一時ファイルまたはバッファを明示的にクリアできます。

例8-27 バッファリング・モード設定のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
 
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
 
     // set buffering mode 
     req.addProperty(DeliveryPropertyDefinitions.BUFFERING_MODE, "true");
     req.addProperty(DeliveryPropertyDefinitions.TEMP_DIR, "/tmp");
           :
           :
           :
     // submit request
     req.submit();
           :
           :
     // submit request again
     req.submit();
           :
           :
     // close the request
     req.close();

8.15 非同期の配信リクエスト

Delivery APIには、コールバック関数を登録することで、配信要求を非同期に実行する機能が用意されています。

DeliveryResponseListenerインタフェースを実装して、独自のコールバック・ロジックを作成できます。それには、resposeReceived()メソッドを実装する必要があります。独自のロジックをこのメソッドに実装することで、配信要求の終了時に独自のロジックをコールできるようになります。サンプル・コードは次のとおりです。

例8-28 コールバック・ロジック実装のサンプル・コード

  import oracle.apps.xdo.delivery.DeliveryResponseListener;

  class MyListener implements DeliveryResponseListener
  {

    public void responseReceived(DeliveryResponse pResponse)
    {
      // Show the status to the System.out
      System.out.println("Request done!");
      System.out.println("Request status id  : " + pResponse.getStatus());
      System.out.println("Request status msg : " + pResponse.getStatusMessage());
    }
    
  }

コールバックを実装したら、DeliveryRequestのsubmit()メソッドのコール時に、実装したコールバック処理を渡すことができます。コールバック処理にあるsubmit()をコールすると、配信プロセスがバックグラウンドで起動され、submit()メソッドはただちに制御を戻します。サンプル・コードは次のとおりです。

例8-29 コールバック・ロジック発行のサンプル・コード

    // create delivery manager instance
    DeliveryManager dm = new DeliveryManager();

    // create a delivery request
    DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
          :
          :
    // submit request with the callback logic
    req.submit(new MyListener());
          :
          :

8.16 ドキュメントのフィルタのサポート

Delivery APIでは、サポートされているすべてのプロトコルに対して、ドキュメント・フィルタ機能がサポートされています。この機能によって、各配信要求を実行する前に、OSのネイティブ・コマンドをコールして、ドキュメントの変換を実行できます。フィルタを指定するには、入力ファイル名と出力ファイル名用の2つのプレースホルダである{infile}および{outfile}とともにOSのネイティブ・コマンドの文字列を渡します。作成したフィルタは、配信プロパティとして配信要求に設定できます。次に、サンプルを2つ示します。

例8-30 ドキュメントのフィルタを配信プロパティとして設定するサンプル・コード

// The easiest filter, just copy the file :)
req.addProperty(DeliveryPropertyDefinitions.FILTER, "cp {infile} {outfile}"); 


// Call "pdftops" utility to transform the PDF document into Postscript format
 req.addProperty(DeliveryPropertyDefinitions.FILTER, "pdftops {infile} {outfile}"); 

また、各サーバーにフィルタを構成ファイルにおいて指定できます(第8.21項「構成ファイルのサポート」を参照)。この場合、このサーバーへの要求には、必ず指定したフィルタが使用されます。

例8-31 ドキュメントのフィルタを構成ファイル内で設定するサンプル・コード

         :
         :

<server name="printer1" type="ipp_printer" default="true">
<uri>ipp://myserver:80/printers/MyPrinter1/.printer</uri>
<filter>pdftops {infile} {outfile}</filter>
</server>
         :
         :

この構成は、IPPプリンタを直接コールするときや、Microsoft Internet Information Service(IIS)上のIPPプリンタをコールするときに特に有効です。これらのプリンタは通常、PDFドキュメントに対応しておらず、特定のドキュメント書式にのみ制限されるためです。この機能を使用することで、オペレーション・システム(OS)の任意のネイティブ・コマンドをコールして、ターゲット・プリンタが認識できる書式にドキュメントを変換できます。たとえば、Microsoft IIS上のHP LaserJetプリンタ設定をLinuxからコールする必要がある場合は、PDFドキュメントをHP LaserJetが認識できる書式に変換するフィルタとしてGhostscriptを設定できます。

例8-32 ドキュメントのフィルタをOSコマンドで使用して設定するサンプル・コード

     // specify filter
     req.addProperty(DeliveryPropertyDefinitions.FILTER, 
     "gs -q -dNOPAUSE -dBATCH -sDEVICE=laserjet -sOutputFile={outfile} 
      {infile}"); 
 

この機能を使用するには、バッファリング・モードを有効にして一時ディレクトリを指定する必要があることに注意してください。第8.21項「構成ファイルのサポート」を参照してください。

8.16.1 PDFからPostScriptへの変換フィルタ

さらに、BI PublisherではPDFからPostscript Level 2変換フィルタが提供されています。この内部フィルタを使用するには、{infile}プレース・ホルダーおよび{outfile}プレース・ホルダーを設定する必要はありません。ただし、次に示すようにフィルタ・クラスを直接指定する必要があります。

例8-33 PDFからPostscript Level 2への変換フィルタを設定するサンプル・コード

req.addProperty(DeliveryPropertyDefinitions.FILTER, "oracle.xdo.delivery.filter.PDF2PSFilterImpl"); 
<server name="printer1" type="ipp_printer" default="true">
ipp://myserver:80/printers/MyPrinter1/.printer
<filter>oracle.xdo.delivery.filter.PDF2PSFilterImpl</filter>
</server>

8.17 日付式のサポート

BI Publisherでは日付式をサポートするプロパティが提供されます。ファイルの命名に日付を使用する場合や実行時に日付を自動的に設定する場合は、日付式を使用します。

次のプロパティが日付式でサポートされます。

サポートされる日付式は次のとおりです。

たとえば、my_file_%y%m%d.txtをファイル名に指定した場合、2005年11月8日であれば、実際のファイル名はmy_file_20051108.txtになります。未定義の式はすべて、長さがゼロの文字列に変換されます。たとえば、my_file_%a%b%c.txtを指定すると、my_file_.txtになります。%'文字は、'%%'を渡すことでエスケープ処理ができます。

8.18 国際化のサポート

配信サーバーのAPIでは、リストされた配信チャネルに対して、次に示す国際化機能がサポートされています。

8.18.1 SMTP

  • SMTP_CONTENT_TYPEによって、メイン・ドキュメントの文字エンコーディング方法を指定します。

  • addAttachment()メソッドのコール時にコンテンツ・タイプを渡すことで、添付の文字エンコーディング方法を指定します。

  • SMTP_CHARACTER_ENCODINGプロパティによって、電子メールの宛先、送信者、CCおよび件名における文字エンコーディング方法を指定します。デフォルト値は"UTF-8"です。

8.18.2 IPP

  • IPP_ATTRIBUTE_CHARSETプロパティによって、IPP属性の文字エンコーディング方法を指定します。デフォルト値は"UTF-8"です。

  • ASCII以外の文字をURLにおいてエンコーディングする場合は、IPP_URL_CHARACTER_ENCODINGプロパティを指定します。

8.18.3 WebDAV

  • ASCII以外の文字をURLにおいてエンコーディングする場合は、WEBDAV_URL_CHARACTER_ENCODINGプロパティを指定します。

8.18.4 FTP

  • FTP配信チャネルの場合は、ターゲットのFTPサーバーでサポートされている国際化が自動的に検出されます。ASCII以外の文字のディレクトリ名およびファイル名を指定できるのは、ターゲットのFTPサーバーで国際化がサポートされている場合のみです(詳細はRFC 2640を参照)。その場合は、UTF-8エンコーディングが自動的に使用されます。サーバーで国際化がサポートされていない場合にASCII以外の文字の値を指定すると、配信プロセス中に例外がスローされます。

8.18.5 HTTP

  • ASCII以外の文字をURLにおいてエンコーディングする場合は、HTTP_CHARACTER_ENCODINGプロパティを指定できます。

8.19 グローバル・プロパティの設定

グローバル・プロパティをDeliveryManagerに対して定義することで、すべての配信要求でグローバル・プロパティが自動的に継承されるようになります。

次のグローバル・プロパティがサポートされています。

表8-13 DeliveryManager APIでサポートされるグローバル・プロパティ

プロパティ 説明

BUFFERING_MODE

有効な値は"true"(デフォルト)および"false"です。第8.14項「ダイレクト・モードとバッファリング・モード」を参照してください。

TEMP_DIR

一時ディレクトリの場所を定義します。

CA_CERT_FILE

Oracle Wallet Managerによって生成されるCA証明書ファイルの場所を定義します。これはOracle SSLライブラリとのSSL接続に使用されます。指定しない場合は、デフォルトのCA証明書が使用されます。


例8-34 グローバル・プロパティ設定のサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();

     // set global properties 
     dm.addProperty(DeliveryPropertyDefinitions.TEMP_DIR, "/tmp");
     dm.addProperty(DeliveryPropertyDefinitions.BUFFERING_MODE, "true");
 
     // create delivery requests
     DeliveryRequest req1 = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
     DeliveryRequest req2 = dm.createRequest(DeliveryManager.TYPE_IPP_FAX);
     DeliveryRequest req3 = dm.createRequest(DeliveryManager.TYPE_SMTP_EMAIL);
           :
           :

8.20 カスタム配信チャネルの追加

カスタム配信チャネルをシステムに追加するには、次の手順を実行します。

  1. 配信プロパティを定義します。

  2. DeliveryRequestインタフェースを実装します。

  3. DeliveryRequestHandlerインタフェースを実装します。

  4. DeliveryRequestFactoryインタフェースを実装します。

  5. カスタムなDeliveryRequestFactoryをDeliveryManagerに登録します。

次の各項では、ドキュメントをローカル・ファイル・システムに配信するサンプル・カスタム配信チャネル(チャネル名は"File delivery channel")を作成することで、配信チャネルの作成方法について詳細に説明します。

8.20.1 配信プロパティの定義

カスタム配信チャネルを追加する最初の手順では、プロパティを定義します。定義するプロパティは、配信チャネルの使用目的によって異なります。プロパティ用に定数を定義できます。ここで紹介するファイル配信チャネルでは、必要となるプロパティは宛先の1つのみです。

サンプル・コードは次のとおりです。

例8-35 配信チャネルのプロパティを定義するサンプル・コード

package oracle.apps.xdo.delivery.file;

public interface FilePropertyDefinitions
  {
     /** Destination property definition.  */
     public static final String FILE_DESTINATION = "FILE_DESTINATION:String";

   }

各定数の値は、文字列であれば任意の値を指定できます。[property name]:[property value type]形式で値を定義することをお薦めします。これによって、配信システムによりプロパティ値が実行時に自動的に検証されます。この例では、FILE_DESTINATIONプロパティが文字列値を持つことが定義されています。

8.20.2 DeliveryRequestインタフェースの実装

DeliveryRequestは、ドキュメントに関する情報と、宛先などの配信メタデータやその他のプロパティを含む配信要求を表します。oracle.apps.xdo.delivery.DeliveryRequestを実装するために、クラスoracle.apps.xdo.delivery.AbstractDeliveryRequestを拡張できます。

たとえば、ドキュメントをローカル・ファイル・システムに配信するカスタム配信チャネルを作成するには、DeliveryRequestの実装は次のようになります。

例8-36 カスタム配信チャネルによるローカル・ファイル・システムへのドキュメントの配信のサンプル・コード

package oracle.apps.xdo.delivery.file;
import oracle.apps.xdo.delivery.AbstractDeliveryRequest;
  
public class FileDeliveryRequest extends AbstractDeliveryRequest
implements FilePropertyDefinitions
{
  private static final String[] MANDATORY_PROPS = {FILE_DESTINATION};
 
  /** 
   * Returns mandatory property names
   */
  public String[] getMandatoryProperties()
  {
    return MANDATORY_PROPS;
  }
  /** 
   * Returns optional property names
   */
  public String[] getOptionalProperties()
  {
    return null;
  }
}

8.20.3 DeliveryRequestHandlerインタフェースの実装

DeliveryRequestHandlerには、配信要求を処理するロジックが含まれます。ファイル配信チャネル用oracle.apps.xdo.delivery.DeliveryRequestHandlerのサンプル実装は、次のようになります。

例8-37 DeliveryRequestHandlerインタフェース実装のサンプル・コード

package oracle.apps.xdo.delivery.file;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import oracle.apps.xdo.delivery.DeliveryException;
import oracle.apps.xdo.delivery.DeliveryRequest;
import oracle.apps.xdo.delivery.DeliveryRequestHandler;
import oracle.apps.xdo.delivery.DeliveryStatusDefinitions;

public class FileDeliveryRequestHandler implements DeliveryRequestHandler
{

  private FileDeliveryRequest mRequest;
  private boolean mIsOpen = false;
  private OutputStream mOut;

  /**
   * default constructor.
   */ 
  public FileDeliveryRequestHandler()
  {
  }

  /** 
   * sets the request.
   */
  public void setRequest(DeliveryRequest pRequest)
  {
    mRequest = (FileDeliveryRequest) pRequest;
  }

  /** 
   * returns the request.
   */
  public DeliveryRequest getRequest()
  {
    return mRequest;
  }

  /** 
   * opens the output stream to the destination.
   */ 
  public OutputStream openRequest() throws DeliveryException
  {
    try
    {
      String filename =
        (String) mRequest.getProperty(FileDeliveryRequest.FILE_DESTINATION);
      mOut = new BufferedOutputStream(new FileOutputStream(filename));

      mIsOpen = true;
      // set request status to open
      mRequest.setStatus(DeliveryStatusDefinitions.STATUS_OPEN);
      return mOut;

    }
    catch (IOException e)
    {
      closeRequest();
      throw new DeliveryException(e);
    }

  }

  /**
   * flushes and closes the output stream to submit the request.
   */ 
  public void submitRequest() throws DeliveryException
  {
    try
    {
      // flush and close
      mOut.flush();
      mOut.close();
      // set request status
      mRequest.setStatus(DeliveryStatusDefinitions.STATUS_SUCCESSFUL);
      mIsOpen = false;
    }
    catch (IOException e)
    {
      closeRequest();
      throw new DeliveryException(e);
    }
  }

  /**
   * checks the delivery status.
   */
  public void updateRequestStatus() throws DeliveryException
  {

    // check if the file is successfully delivered
    String filename =
      (String) mRequest.getProperty(FileDeliveryRequest.FILE_DESTINATION);
    File f = new File(filename);

    // set request status
    if (f.exists())
      mRequest.setStatus(DeliveryStatusDefinitions.STATUS_SUCCESSFUL);
    else
      mRequest.setStatus(DeliveryStatusDefinitions.STATUS_FAILED_IO_ERROR);

  }
  /**
   * returns the request status.
   */ 
  public boolean isRequestOpen()
  {
    return mIsOpen;
  }

  /** 
   * closes the request, frees all resources.
   */
  public void closeRequest()
  {
    mIsOpen = false;
    try
    {
      if (mOut != null)
      {
        mOut.flush();
        mOut.close();
      }
    }
    catch (IOException e)
    {
    }
    finally
    {
      mOut = null;
    }
  }

}

8.20.4 DeliveryRequestFactoryインタフェースの実装

カスタム配信チャネルを配信システムに登録するためのDeliveryRequestFactoryインタフェースを実装します。

oracle.apps.xdo.delivery.DeliveryRequestFactoryのサンプル実装は次のとおりです。

例8-38 DeliveryRequestFactoryインタフェース実装のサンプル・コード

package oracle.apps.xdo.delivery.file;

import oracle.apps.xdo.delivery.DeliveryRequest;
import oracle.apps.xdo.delivery.DeliveryRequestFactory;
import oracle.apps.xdo.delivery.DeliveryRequestHandler;

public class FileDeliveryRequestFactory
implements DeliveryRequestFactory
{
  /** 
   * default constructor.
   */
  public FileDeliveryRequestFactory()
  {
  }
  /** 
   * returns delivery request.
   */
  public DeliveryRequest createRequest()
  {
    return new FileDeliveryRequest();
  }
  /**
   * returns delivery request handler.
   */
  public DeliveryRequestHandler createRequestHandler()
  {
    return new FileDeliveryRequestHandler();
  }
  /**
   * returns this
   */  
  public DeliveryRequestFactory getFactory()
  {
    return this;
  }
} 

8.20.5 DeliveryManagerへのカスタムなDeliveryRequestFactoryの登録

最後の手順では、カスタム配信チャネルを配信システムに登録します。配信チャネルは、次の2種類の方法で登録できます。

  • 静的な方法

    この方法では、配信チャネルを構成ファイルに指定することで、配信システム全体に対して登録します。第8.21項「構成ファイルのサポート」を参照してください。

  • 動的な方法

    登録用APIをプログラムでコールすることで、配信チャネルをJava VMインスタンスに登録します。

    動的な方法を使用してファイル配信チャネルを登録し、そのファイル配信チャネルをコールするサンプル・コードは次のとおりです。

    例8-39 動的な方法によるファイル配信チャネルの登録とコールのサンプル・コード

    package oracle.apps.xdo.delivery.file;
    
    import oracle.apps.xdo.delivery.DeliveryManager;
    import oracle.apps.xdo.delivery.DeliveryRequest;
    
    public class FileDeliverySample
    {
      public static void main(String[] args) throws Exception
      {
        // register the file delivery channel 
        DeliveryManager.addRequestFactory("file", "oracle.apps.xdo.delivery.file.FileDeliveryRequestFactory");
    
        // create delivery manager instance
        DeliveryManager dm = new DeliveryManager();
        // create a delivery request
        DeliveryRequest req = dm.createRequest("file");
    
        // set the destination
        req.addProperty(
          FileDeliveryRequest.FILE_DESTINATION,
          "d:/Temp/testDocument_delivered.pdf");
        // set the document to deliver
        req.setDocument("D:/Temp/testDocument.pdf");
    
        // submit the request
        req.submit();
        // close the request
        req.close();
      }
    }
    

8.21 構成ファイルのサポート

配信システムでは、構成ファイルによるデフォルト・サーバー、デフォルト・プロパティおよびカスタム配信チャネルの設定がサポートされています。構成ファイルは、次の場所にあります。

{XDO_TOP}/resource/xdodelivery.cfg

ここで、{XDO_TOP}は、物理ディレクトリを示すJavaシステム・プロパティです。

このシステム・プロパティは、次の2種類の方法で設定できます。

システム・プロパティは、DeliveryManagerオブジェクトを作成する前に定義する必要があります。

次に、構成ファイルのサンプルを示します。

例8-40 サンプル構成ファイル

<?xml version='1.0' encoding='UTF-8'?>
 <config xmlns="http://xmlns.oracle.com/oxp/delivery/config">
   <! -  ========================================================  - >
   <! -     servers section                                        - >
   <! -     List your pre-defined servers here.                    - >

   <! -  ========================================================  - >
   <servers>
     <server name="myprinter1" type="ipp_printer" default="true">
       <uri>ipp://myprinter1.oracle.com:631/printers/myprinter1</uri>

     </server>
     <server name="myprinter2" type="ipp_printer" >
       <host>myprinter2.oracle.com</host>
       <port>631</port>

       <uri>ipp://myprinter2.oracle.com:631/printers/myprinter2</uri>
       <authType>basic</authType>
       <username>xdo</username>
       <password>xdo</password>

     </server>
     <server name="myfax1" type="ipp_fax" default="true" >
       <host>myfax1.oracle.com</host>

       <port>631</port>
       <uri>ipp://myfax1.oracle.com:631/printers/myfax1</uri>
     </server>
     <server name="mysmtp1" type="smtp_email" default="true">

       <host>myprinter1.oracle.com</host>
       <port>25</port>
     </server>
     <server name="mysmtp2" type="smtp_email" >

       <host>mysmtp12.oracle.com</host>
       <port>25</port>
       <username>xdo</username>
       <password>xdo</password>

     </server>
   </servers>
   <! -  ========================================================  - >
   <! -     properties section                                     - >
   <! -     List the system properties here.                       - >
   <! -  ========================================================  - >
   <properties>

     <property name="ds-temp-dir">/tmp</property>
     <property name="ds-buffering">true</property>
   </properties>
   <! -  ========================================================  - >
   <! -      channels section                                      - >

   <! -      List the custom delivery channels here.               - >
   <! -  ========================================================  - >
   <channels>
     <channel name="file">oracle.apps.xdo.delivery.file.FileDeliveryRequestFactory</channel>
   </channels>

 </config>

8.21.1 配信チャネルに対する複数のサーバーの定義

複数のサーバー・エントリを各配信チャネルに対して定義できます。たとえば、前述のサンプル構成ファイルでは、2つのサーバー・エントリ("myprinter1"と"myprinter2")が"ipp_printer"配信チャネルに対して定義されています。

サーバー・エントリを配信要求に対してロードするには、DeliveryRequest.setServer()メソッドをコールします。次に例を示します。

例8-41 配信チャネルに対する複数のサーバーを定義するサンプル・コード

// create delivery manager instance
     DeliveryManager dm = new DeliveryManager();
     // create a delivery request
     DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
 
     // load myprinter1 setting
     req.setServer("myprinter1");

8.21.2 配信チャネルに対するデフォルト・サーバーの指定

デフォルト・サーバーを配信チャネルに対して定義するには、default="true"を指定します。前述の構成ファイル例では、"myprinter1"がデフォルト・サーバーとして"ipp_printer"配信チャネルに対して定義されています。ユーザーがサーバー・プロパティを"ipp_printer"配信に対して指定しない場合は、デフォルト・サーバーに定義されたサーバー・プロパティが使用されます。

8.21.3 サポートされている構成ファイルのプロパティと要素

次のプロパティが<properties>セクションでサポートされています。

  • ds-temp-dir: 一時ディレクトリの場所です。

  • ds-buffering: バッファリング・モードに対してtrueまたはfalseを指定します。

  • ds-ca-cert-file: SSL証明書ファイルの場所を指定します。

次の要素が<server type="ipp_printer">および<server type="ipp_fax">でサポートされています。

  • <host>

  • <port>

  • <printerName>

  • <uri>

  • <username>

  • <password>

  • <authType>

  • <encType>

  • <proxyHost>

  • <proxyPort>

  • <proxyUsername>

  • <proxyPassword>

  • <proxyAuthType>

  • <filter>

  • <filterOutputContentType>

次の要素が<server type="smtp_email">でサポートされています。

  • <secureConnection>

  • <host>

  • <port>

  • <username>

  • <password>

  • <authType>

  • <filter>

次の要素が<server type="rightfax">でサポートされています。

  • <host>

  • <port>

  • <uri>

  • <username>

  • <password>

  • <authType>

  • <encType>

  • <proxyHost>

  • <proxyPort>

  • <proxyUsername>

  • <proxyPassword>

  • <proxyAuthType>

  • <filter>

  • <filterOutputContentType>

次の要素が<server type="printer">でサポートされています。

  • <host>

  • <filter>

  • <filterOutputContentType>

次の要素が<server type="webdav">でサポートされています。

  • <host>

  • <port>

  • <uri>

  • <username>

  • <password>

  • <authType>

  • <encType>

  • <proxyHost>

  • <proxyPort>

  • <proxyUsername>

  • <proxyPassword>

  • <proxyAuthType>

  • <filter>

次の要素が<server type="ftp">でサポートされています。

  • <host>

  • <port>

  • <username>

  • <password>

  • <filter>

  • <passiveMode>

次の要素が<server type="sftp">でサポートされています。

  • <host>

  • <port>

  • <username>

  • <password>

  • <filter>

  • <authType>

次の要素が<server type="http">でサポートされています。

  • <host>

  • <port>

  • <uri>

  • <username>

  • <password>

  • <authType>

  • <encType>

  • <proxyHost>

  • <proxyPort>

  • <proxyUsername>

  • <proxyPassword>

  • <proxyAuthType>

次の要素が<server type="as2">でサポートされています。

  • <host>

  • <port>

  • <uri>

  • <username>

  • <password>

  • <authType>

  • <encType>

  • <proxyHost>

  • <proxyPort>

  • <proxyUsername>

  • <proxyPassword>

  • <proxyAuthType>

次の要素が<server type="external">でサポートされています。

  • <command>

  • <filter>