Oracle Business Intelligence Publisherユーザーズ・ガイド リリース10.1.3.2 E05037-01 | 目次 | 前へ | 次へ |
配信マネージャは、BI Publisher文書の配信制御に使用可能なJava APIのセットです。配信マネージャは、次のタスクの実行に使用します。
確立された配信チャネル(電子メール、FAX、プリンタ、WebDAV、FTP、Secure FTP、AS2またはHTTP)またはカスタム配信チャネル経由での文書の配信
各配信のステータスの追跡
文書の再配信
配信マネージャを使用するには、次の手順を実行します。
DeliveryManagerインスタンスを作成します。
createRequest()メソッドを使用して、DeliveryRequestインスタンスを作成します。
要求のプロパティ(DeliveryRequestの宛先など)を追加します。ほとんどのプロパティには文字列値が必要です。詳細は、各配信チャネルでサポートされているプロパティを参照してください。
配信する文書をDeliveryRequestに設定します。
submit()をコールし、配信要求を実行します。
1つの配信要求で処理できるのは、1つの文書と1つの宛先です。これによって、監視と再送信が必要に応じて容易に実行できます。
DeliveryRequestでは、次の2種類の方法で文書を設定できます。
DeliveryRequestに文書の入力ストリームを設定する方法: submit()を最初にコールしたときに、DeliveryRequestでは入力ストリームが読み取られます。DeliveryRequestでは入力ストリームが閉じないため、必ずユーザーが閉じる必要があります。
文書のファイル名をDeliveryRequestに設定する方法
ダイレクト・モードを設定すると、配信マネージャで配信のストリーム化がサポートされます。詳細は、「ダイレクト・モードとバッファリング・モード」を参照してください。
この章では、文書の次の配信チャネルについて説明します。
電子メール
プリンタ
FAX
WebDAV
FTP
Secure FTP
HTTP
AS2
次に、電子メール経由で文書を配信するコードの例を示します。
// 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@mydomain.com");
// set the destination email address
req.addProperty(
DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS, "user1@mydomain.com, user2@mydomain.com" );
// 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();
次の表に、サポートされているプロパティを示します。
プロパティ | 説明 |
---|---|
SMTP_TO_RECIPIENTS | 必須。 カンマで区切った複数の受信者を入力します(例: "user1@mydomain.com, user2@mydomain.com")。 |
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_TYPE | 必須。 MIMEタイプを入力します。 |
SMTP_SMTP_HOST | 必須。 SMTPホストの名前を入力します。 |
SMTP_SMTP_PORT | オプション。 SMTPポートを入力します。デフォルトは25です。 |
SMTP_SMTP_USERNAME | オプション。 SMTPサーバーが認証を必要とする場合は、サーバーのユーザー名を入力します。 |
SMTP_SMTP_PASSWORD | オプション。 SMTPサーバーが認証を必要とする場合は、入力したユーザー名に対応するパスワードを入力します。 |
SMTP_ATTACHMENT_FIRST | オプション。 電子メールに添付を含めるときに、その添付を最初に表示する場合は"true"を入力します。最初に表示しない場合は"false"を入力します。 |
電子メール・サーバーによる配信チャネルでは、1つの要求に複数の文書と複数の受信者を設定できます。次に、複数のTOアドレスと複数のCCアドレスを設定するコードの例を示します。
// set the TO email addresses
req.addProperty(
DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS,
"user1@mydomain.com", user2@mydomain.com, user3@mydomain.com");
// set the CC email addresses
req.addProperty(
DeliveryPropertyDefinitions.SMTP_CC_RECIPIENTS,
"user4@mydomain.com, user5@mydomain.com, user6@mydomain.com");
Attachmentユーティリティ・クラス(oracle.apps.xdo.delivery.smtp.Attachment)を使用すると、複数の文書が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);
:
:
複数のHTML文書を1つの要求に添付できます。ローカルのファイル・システムにあるイメージ・ファイルへの参照がHTML文書にある場合は、Attachmentユーティリティによって、これらのイメージ・ファイルも自動的に添付されます。次に、その使用方法の例を示します。
Attachment m = new Attachment();
m.addHtmlAttachment("/path/to/my.html");
:
:
req.addProperty(DeliveryPropertyDefinitions.SMTP_ATTACHMENT, m);
電子メールの最上部に添付を表示する場合は、プロパティのSMTP_ATTACHMENT_FIRSTを"true"に設定します。次に、その使用方法の例を示します。
Attachment m = new Attachment();
m.addHtmlAttachment("/path/to/my.html");
:
:
req.addProperty(DeliveryPropertyDefinitions.SMTP_ATTACHMENT_FIRST, "true");
:
電子メールの本文に、Stringオブジェクトを使用できます。この方法は、添付ファイルとともにメッセージを含める場合などに便利です。次のサンプル・コードでは、電子メールの本文としてメッセージ"Please find the attached invoice."が配信され、添付ファイルとして1つのPDF文書"invoice.pdf"が配信されます。
// 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@mydomain.com");
// set the destination email address
req.addProperty(
DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS, "user1@mydomain.com, user2@mydomain.com" );
// 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();
:
:
電子メールの本文には、HTML文書も使用できます。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@mydomain.com");
// set the destination email address
req.addProperty(
DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS, "user1@mydomain.com, user2@mydomain.com" );
// 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();
:
:
SMTPサーバーが認証を必要とする場合は、要求の配信に使用するユーザー名とパスワードを指定できます。
:
req.addProperty(DeliveryPropertyDefinitions.SMTP_USERNAME, "scott");
req.addProperty(DeliveryPropertyDefinitions.SMTP_PASSWORD, "tiger");
:
配信サーバーでは、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/を参照してください。システムにおけるCUPSの設定方法の詳細は、「CUPSの設定」を参照してください。
IPPを使用して文書を印刷するには、文書を配信する前に、その文書をターゲットのIPPプリンタまたはサーバーが認識できる書式に変換する必要があります。たとえば、ターゲット・プリンタがPostscriptプリンタであれば、文書をPostscript書式に変換する必要があります。通常、プリンタでは、PDF、RTF、ExcelまたはWord文書の書式がネイティブに処理されません。Delivery API自体には文書の書式変換機能はありませんが、この変換を実現する目的で文書フィルタがサポートされています。詳細は、「文書フィルタのサポート」を参照してください。
次は、プリンタに配信するためのコード・サンプルです。
// 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を設定しても効果はありません。
プロパティ | 説明 |
---|---|
IPP_HOST | 必須。 ホスト名を入力します。 |
IPP_PORT | オプション。 デフォルトは631です。 |
IPP_PRINTER_NAME | 必須。 出力を受信するプリンタの名前を入力します。
|
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_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_PAGE_RANGES | 印刷するページ範囲を指定します。デフォルトでは、すべてのページが印刷されます、次に、例を示します。
|
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
配信システムでは、CUPS上に構成されたFAXモデムへの文書の配信がサポートされています。FAXモデムをCUPSで構成するには、efax(http://www.cce.com/efax/)およびFAX4CUPS(http://www.gnu.org/directory/productivity/special/fax4CUPS.html)を使用できます。
次は、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();
サポートされているプロパティは、プリンタ文書と同じプロパティと、次の固有のプロパティです。
プロパティ | 説明 |
---|---|
IPP_PHONE_NUMBER | 必須。 FAX番号を入力します。 |
次は、Web-based Distributed Authoring and Versioning(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();
次のプロパティがサポートされています。特別に指示されている場合を除き、各プロパティには文字列値が必要です。
プロパティ | 説明 |
---|---|
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のエンコーディング方法です。ASCII以外の文字をURLで使用する場合に使用されます。Javaがサポートするエンコーディング文字列を値に設定します。 |
次は、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();
次のプロパティがサポートされています。特別に指示されている場合を除き、各プロパティには文字列値が必要です。
プロパティ | 説明 |
---|---|
FTP_HOST | 必須。 サーバーのホスト名を入力します。 |
FTP_PORT | オプション。 サーバーのポート番号を入力します。デフォルトは21です。 |
FTP_USERNAME | 必須。 FTPサーバーへのログイン・ユーザー名を入力します。 |
FTP_PASSWORD | 必須。 FTPサーバーへのログイン・パスワードを入力します。 |
FTP_REMOTE_DIRECTORY | 必須。 文書の配信先ディレクトリを入力します(例: /pub/)。 |
FTP_REMOTE_FILENAME | 必須。 リモート・サーバーの文書ファイルの名前を入力します。 |
FTP_BINARY_MODE | オプション。 有効な値は"true"(デフォルト)または"false"です。 |
Secure FTPはSecure Shellテクノロジ(ssh)に基づいたプロトコルで、セキュアな方式でのファイル転送に幅広く使用されます。Secure ShellとSecure FTPはともにInternet Engineering Task Force(IETF)により定義されており、その仕様はIETFのWebサイト(http://www.ietf.org)から入手できます。配信システムでは、Secure FTPサーバーへの文書の配信がサポートされています。
次の表に、サポートされているプロパティを示します。特別に指示されている場合を除き、各プロパティには文字列値が必要です。
// 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();
プロパティ | 説明 |
---|---|
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です。 |
Secure FTPによる配信では、パスワード認証と公開鍵認証の2タイプの認証モードがサポートされています。SFTP_AUTH_TYPEプロパティを設定してモードを選択します。デフォルトのモードはパスワード認証です。
:
:
// 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");
:
:
パスワード認証モードでは、Secure FTPサーバーにログインするためのユーザー名とパスワードが必要です。次に、サンプル・コードを示します。
:
:
// 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サーバーに公開鍵を設定する必要があることに注意してください。次に、サンプル・コードを示します。
:
:
// 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");
:
:
配信マネージャでは、HTTPサーバーへの文書の配信がサポートされています。次のサンプルでは、HTTP POSTメソッドを使用して文書を送信します。受信側のHTTPサーバーが、事前に、カスタムなHTTP要求を(カスタムなサーブレットやCGIプログラムなどを介して)受入れ可能に構成されている必要があることに注意してください。
// 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();
次の表に、サポートされているプロパティを示します。特別に指示されている場合を除き、各プロパティには文字列値が必要です。
プロパティ | 説明 |
---|---|
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のエンコーディング方法です。ASCII以外の文字をURLで使用する場合に使用されます。Javaがサポートするエンコーディング文字列を値に設定します。 |
AS2は、Electronic Data Interchange-Internet Integration(EDI-INT)で定義されている標準プロトコルの1つです。AS2は、HTTPとその他のインターネット標準テクノロジをベースとし、インターネットを介してセキュアなデータ交換を行うために設計されています。AS2の仕様はRFC4130(http://www.ietf.org/で入手可能)で定義されています。配信システムでは、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();
次の表に、サポートされているプロパティを示します。特別に指示されている場合を除き、各プロパティには文字列値が必要です。
プロパティ | 説明 |
---|---|
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 | 必須。 文書のコンテンツ・タイプを入力します。有効な値は次のとおりです。
|
AS2_ENC_ALGO | AS2暗号化アルゴリズムです。次のいずれかを設定します。
|
AS2_DIGEST_ALGO | メッセージの署名に使用するAS2ダイジェスト・アルゴリズムを入力します。次のどちらかを設定します。
|
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_USERNAME | HTTP認証に使用するユーザー名を入力します。 |
AS2_HTTP_PASSWORD | HTTP認証に使用するパスワードを入力します。 |
AS2_HTTP_ENCTYPE | 暗号化タイプを設定します。有効な値は次のとおりです。
|
AS2_HTTP_TIMEOUT | タイムアウト待ち時間をミリ秒単位で入力します。デフォルトは60,000(1分)です。 |
AS2_HTTP_PROXY_HOST | 必須。 プロキシ・サーバーのホスト名を入力します。 |
AS2_HTTP_PROXY_PORT | プロキシ・サーバーのポート番号を入力します。デフォルトは80です。 |
AS2_HTTP_PROXY_AUTHTYPE |
|
AS2_HTTP_PROXY_USERNAME | プロキシ認証に使用するユーザー名を入力します。 |
AS2_HTTP_PROXY_PASSWORD | HTTPプロキシ認証に使用するパスワードを入力します。 |
AS2サーバーは、AS2配信通知を各AS2要求に対して必ず発行します。AS2_DELIVERY_RECEIPT_DIRECTORYプロパティを設定し、配信通知を格納する場所を指定します。このディレクトリを指定しない場合、配信通知は無視されます。配信通知の格納先ディレクトリを設定するコード例を次に示します。
:
:
// Set the delivery receipt directory
req.addProperty(DeliveryPropertyDefinitions.AS2_DELIVERY_RECEIPT_DIRECTORY, "/my/receipt/dir");
:
:
AS2サーバーに送信する配信要求は、同期または非同期にできます。デフォルトでは、要求は同期して送信されるため、Message Disposition Notification(MDN)をただちにDeliveryResponseで確認できます。
AS2_ASYNC_ADDRESSを要求に対して設定すると、要求は非同期になります。要求処理後の配信通知の受信先として、HTTP URLまたは電子メール・アドレスを指定できます。配信通知を受信するには、HTTPサーバーまたは電子メール・アドレスを設定する必要があります。
AS2_ASYNC_ADDRESSに電子メール・アドレスを設定した場合は、Delivery APIを使用して、非同期要求を追跡できます。Delivery APIに電子メール・アカウントの情報を指定すると、Delivery APIによって電子メール・アカウントが定期的にチェックされ、配信通知が取得されます。追跡を設定するサンプル・コードは次のとおりです。
:
:
// 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の非同期配信要求メカニズムを使用する必要があることに注意してください。詳細は、「非同期の配信要求」を参照してください。
Delivery APIにより文書に署名してトランザクションをセキュアにできます。この機能は公開鍵アーキテクチャに基づくため、次の設定が必要になります。
送信者側: 送信者の公開鍵と秘密鍵
送信者は、送信者の公開鍵と秘密鍵をPKCS12標準ファイルに所持している必要があります。ファイルの拡張子は.p12です。このファイルを、Delivery APIを実行するローカル・システムに配置します。
受信者側(AS2サーバー側): 送信者の公開鍵証明書
受信者は、送信者の公開鍵証明書を所持している必要があります。AS2サーバーへの証明書のインストール方法は、サーバーによって異なります。一般的に、.der証明書または.cer証明書を特定の場所にコピーする必要があります。手順の詳細は、ご使用のAS2サーバーのマニュアルを参照してください。
設定が完了したら、配信要求においてプロパティを設定して文書に署名できます。サンプル・コードは次のとおりです。
:
:
// 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");
:
:
Delivery APIにより文書を暗号してトランザクションをセキュアにできます。この機能は公開鍵アーキテクチャに基づくため、次の設定が必要になります。
送信者側: 受信者の公開鍵証明書
送信者側は、受信者の公開鍵証明書ファイルを所持している必要があります。ファイルの拡張子は.derまたは.cerです。このファイルを、Delivery APIを実行するローカル・システムに配置します。AS2サーバーの公開鍵証明書を取得する手順の詳細は、ご使用のAS2サーバーのマニュアルを参照してください。
受信者側(AS2サーバー側): 受信者の公開鍵と秘密鍵
受信者側(AS2サーバー)は、受信者の公開鍵と秘密鍵を所持している必要があります。これらの鍵の設定手順の詳細は、ご使用のAS2サーバーのマニュアルを参照してください。
設定が完了したら、配信要求においてプロパティを設定して文書を暗号化できます。サンプル・コードは次のとおりです。
:
:
// Encrypting the document
req.addProperty(DeliveryPropertyDefinitions.AS2_MESSAGE_ENCRYPTION, "true");
req.addProperty(DeliveryPropertyDefinitions.AS2_RECEIVER_CERTIFICATES_FILE, "/path/to/server-certificate.der");
:
:
Delivery APIでは、外部(つまりオペレーティング・システム(OS))のネイティブ・コマンドを使用して文書を配信する機能がサポートされています。
OSのネイティブ・コマンドは、{file}プレースホルダとともに指定します。実行時に、このプレースホルダが文書のファイル名に置換されます。
配信のステータスは、OSコマンドのexit値によって決まります。この値が0の場合、要求は成功とみなされます。
サンプル・コードは次のとおりです。
// 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(ExternalDeliveryPropertyDefinitions.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には、次のプロパティがサポートされ定義されています。
プロパティ | 説明 |
---|---|
EXTERNAL_DELIVERY_COMMAND | 必須。 配信に使用するOSネイティブ・コマンドを入力します。 |
Delivery APIでは、Delivery APIが実行しているローカル・ファイル・システムへの文書の配信がサポートされています。このコマンドにより、指定されたファイルが指定された場所にコピーされます。
次のサンプル・コードにより、/document/test.pdfファイルが/destination/document.pdfにコピーされます。
// 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(ExternalDeliveryPropertyDefinitions.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には、次のプロパティがサポートされ定義されています。
プロパティ | 説明 |
---|---|
LOCAL_DESTINATION | 必須。 ローカル・ファイル・システムにおけるコピー先ファイルの名前へのフルパスです。 |
配信システムでは、ダイレクト・モードとバッファリング・モードの2種類の配信モードがサポートされています。バッファリング・モードがデフォルトです。
ダイレクト・モードにより、完全にストリームライン化した配信処理が実現します。文書は、宛先に直接接続された接続ストリームに配信されます。このモードは高速で、使用するメモリーとディスク領域が少なくなります。ダイレクト・モードは、オンラインの対話型処理にお薦めします。
ダイレクト・モードを設定するには、BUFFERING_MODEプロパティを"false"に設定します。次に、そのコード・サンプルを示します。
// 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");
:
:
:
このモードでは、文書の再配信はサポートされていません。再配信が必要な場合は、バッファリング・モードを使用します。
バッファリング・モードでは、何度でも文書を再配信できます。一時ディレクトリ(ds-temp-dir)を配信サーバー構成ファイルで指定すると、配信システムでは、一時ファイルを使用して文書がバッファされます。一時ディレクトリを指定しない場合、配信システムでは一時メモリー・バッファが使用されます。一時ディレクトリを定義することをお薦めします。この構成ファイルの詳細は、「構成ファイルのサポート」を参照してください。
配信要求の終了後に、DeliveryRequest.close()をコールして、一時ファイルまたはバッファを明示的にクリアできます。
// 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();
Delivery APIには、コールバック関数を登録することで、配信要求を非同期に実行する機能が用意されています。
DeliveryResponseListenerインタフェースを実装して、独自のコールバック・ロジックを作成できます。それには、resposeReceived()メソッドを実装する必要があります。独自のロジックをこのメソッドに実装することで、配信要求の終了時に独自のロジックをコールできるようになります。サンプル・コードは次のとおりです。
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()メソッドはただちに制御を戻します。サンプル・コードは次のとおりです。
// 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());
:
:
Delivery APIでは、サポートされているすべてのプロトコルに対して、文書フィルタ機能がサポートされています。この機能によって、各配信要求を実行する前に、OSのネイティブ・コマンドをコールして、文書変換を実行できます。フィルタを指定するには、入力ファイル名と出力ファイル名用の2つのプレースホルダである{infile}および{outfile}とともにOSのネイティブ・コマンドの文字列を渡します。作成したフィルタは、配信プロパティとして配信要求に設定できます。次に、サンプルを2つ示します。
// 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}");
また、各サーバーに固有のフィルタを構成ファイルにおいて指定できます(「構成ファイルのサポート」を参照)。この場合、このサーバーへの要求には、必ず指定したフィルタが使用されます。
:
:
<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を設定できます。
// specify filter
req.addProperty(DeliveryPropertyDefinitions.FILTER,
"gs -q -dNOPAUSE -dBATCH -sDEVICE=laserjet -sOutputFile={outfile}
{infile}");
この機能を使用するには、バッファリング・モードを有効にして一時ディレクトリを指定する必要があることに注意してください。これらのプロパティの設定方法の詳細は、「構成ファイルのサポート」を参照してください。
3つのプロパティで日付式がサポートされます。ファイルの命名に日付を使用する場合や実行時に日付を自動的に設定する場合は、日付式を使用します。
日付式がサポートされるプロパティは次のとおりです。
SMTP_CONTENT_FILENAME
FTP_REMOTE_FILENAME
WEBDAV_REMOTE_FILENAME
サポートされる日付式は次のとおりです。
%y: 4桁の年(例: 1972、2005)
%m: 2桁の月(00〜12)
%d: 2桁の日(00〜31)
%H: 24時間ベースの2桁の時(00〜24)
%M: 2桁の分(00〜59)
%S: 2桁の秒(00〜59)
%l: 3桁のミリ秒(000〜999)
たとえば、my_file_%y%m%d.txtをファイル名に指定した場合、2005年11月8日であれば、実際のファイル名はmy_file_20051108.txtになります。未定義の式はすべて、長さがゼロの文字列に変換されます。たとえば、my_file_%a%b%c.txtを指定すると、my_file_.txtになります。'%'文字は、'%%'を渡すことでエスケープ処理ができます。
配信サーバーのAPIでは、リストされた配信チャネルに対して、次に示す国際化機能がサポートされています。
SMTP
SMTP_CONTENT_TYPEによって、メイン文書の文字エンコーディング方法を指定します。
addAttachment()メソッドのコール時にコンテンツ・タイプを渡すことで、添付の文字エンコーディング方法を指定します。
SMTP_CHARACTER_ENCODINGプロパティによって、電子メールの宛先、送信者、CCおよび件名における文字エンコーディング方法を指定します。デフォルト値は"UTF-8"です。
IPP
IPP_ATTRIBUTE_CHARSETプロパティによって、IPP属性の文字エンコーディング方法を指定します。デフォルト値は"UTF-8"です。
ASCII以外の文字をURLにおいてエンコーディングする場合は、IPP_URL_CHARACTER_ENCODINGプロパティを指定します。
WebDAV
ASCII以外の文字をURLにおいてエンコーディングする場合は、WEBDAV_URL_CHARACTER_ENCODINGプロパティを指定します。
FTP
FTP配信チャネルの場合は、ターゲットのFTPサーバーでサポートされている国際化が自動的に検出されます。ASCII以外の文字のディレクトリ名およびファイル名を指定できるのは、ターゲットのFTPサーバーで国際化がサポートされている場合のみです(詳細はRFC 2640を参照)。その場合は、UTF-8エンコーディングが自動的に使用されます。サーバーで国際化がサポートされていない場合にASCII以外の文字の値を指定すると、配信プロセス中に例外がスローされます。
HTTP
ASCII以外の文字をURLにおいてエンコーディングする場合は、WEBDAV_URL_CHARACTER_ENCODINGプロパティを指定できます。
配信システムでは、getStatus()メソッドをコールすると要求の最新の配信ステータスをチェックできます。要求のステータスはいつでもチェックできますが、その間は配信要求オブジェクトを保持する必要があります。ステータス定義は、DeliveryRequestインタフェースで定義されます。
SMTP配信チャネルおよびHTTP配信チャネルでは、配信ステータスの監視はサポートされません。
// create delivery manager instance
DeliveryManager dm = new DeliveryManager();
// create a delivery request
DeliveryRequest req = dm.createRequest(DeliveryManager.TYPE_IPP_PRINTER);
:
:
// submit request
req.submit();
:
:
// get request status
int status = req.getStatus();
if (status == DeliveryRequest.STATUS_SUCCESSFUL)
{
System.out.println("Request has been delivered successfully.");
}
:
:
// get request status again...
status = req.getStatus();
:
:
グローバル・プロパティをDeliveryManagerに対して定義することで、すべての配信要求でグローバル・プロパティが自動的に継承されるようになります。
次のグローバル・プロパティがサポートされています。
プロパティ | 説明 |
---|---|
BUFFERING_MODE | 有効な値は"true"(デフォルト)および"false"です。詳細は、「ダイレクト・モードとバッファリング・モード」を参照してください。 |
TEMP_DIR | 一時ディレクトリの場所を定義します。 |
CA_CERT_FILE | Oracle Wallet Managerによって生成されるCA証明書ファイルの場所を定義します。これはOracle SSLライブラリとのSSL接続に使用されます。指定しない場合は、デフォルトのCA証明書が使用されます。 |
// 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);
:
:
カスタム配信チャネルをシステムに追加するには、次の手順を実行します。
配信プロパティを定義します。
DeliveryRequestインタフェースを実装します。
DeliveryRequestHandlerインタフェースを実装します。
DeliveryRequestFactoryインタフェースを実装します。
カスタムなDeliveryRequestFactoryをDeliveryManagerに登録します。
次の各項では、文書をローカル・ファイル・システムに配信するサンプル・カスタム配信チャネル(チャネル名は"File delivery channel")を作成することで、配信チャネルの作成方法について詳細に説明します。
カスタム配信チャネルを追加する最初の手順では、プロパティを定義します。定義するプロパティは、配信チャネルの使用目的によって異なります。プロパティ用に定数を定義できます。ここで紹介するファイル配信チャネルでは、必要となるプロパティは宛先の1つのみです。
サンプル・コードは次のとおりです。
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プロパティが文字列値を持つことが定義されています。
DeliveryRequestは、文書に関する情報と、宛先などの配信メタデータやその他のプロパティを含む配信要求を表します。oracle.apps.xdo.delivery.DeliveryRequestを実装するために、クラスoracle.apps.xdo.delivery.AbstractDeliveryRequestを拡張できます。
たとえば、文書をローカル・ファイル・システムに配信するカスタム配信チャネルを作成するには、DeliveryRequestの実装は次のようになります。
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;
}
}
DeliveryRequestHandlerには、配信要求を処理するロジックが含まれます。ファイル配信チャネル用oracle.apps.xdo.delivery.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;
}
}
}
カスタム配信チャネルを配信システムに登録するためのDeliveryRequestFactoryインタフェースを実装します。
oracle.apps.xdo.delivery.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;
}
}
最後の手順では、カスタム配信チャネルを配信システムに登録します。配信チャネルは、次の2種類の方法で登録できます。
静的な方法
この方法では、配信チャネルを構成ファイルに指定することで、配信システム全体に対して登録します。詳細は、「構成ファイルのサポート」を参照してください。
動的な方法
登録用APIをプログラムでコールすることで、配信チャネルをJava VMインスタンスに登録します。
動的な方法を使用してファイル配信チャネルを登録して、そのファイル配信チャネルをコールするサンプル・コードは次のとおりです。
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();
}
}
配信システムでは、構成ファイルによるデフォルト・サーバー、デフォルト・プロパティおよびカスタム配信チャネルの設定がサポートされています。構成ファイルは、次の場所にあります。
{XDO_TOP}/resource/xdodelivery.cfg
ここで、{XDO_TOP}は、物理ディレクトリを示すJavaシステム・プロパティです。
このシステム・プロパティは、次の2種類の方法で設定できます。
-DXDO_TOP=/path/to/xdotopをJavaの起動パラメータに渡します。
java.lang.System.getProperties().put("XDO_TOP", "/path/to/xdotop")などのJava APIをコードに使用します。
システム・プロパティは、DeliveryManagerオブジェクトを作成する前に定義する必要があります。
次に、構成ファイルのサンプルを示します。
<?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>
複数のサーバー・エントリを各配信チャネルに対して定義できます。たとえば、前述のサンプル構成ファイルでは、2つのサーバー・エントリ("myprinter1"と"myprinter2")が"ipp_printer"配信チャネルに対して定義されています。
サーバー・エントリを配信要求に対してロードするには、DeliveryRequest.setServer()メソッドをコールします。次に例を示します。
// 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");
デフォルト・サーバーを配信チャネルに対して定義するには、default="true"を指定します。前述の構成ファイル例では、"myprinter1"がデフォルト・サーバーとして"ipp_printer"配信チャネルに対して定義されています。ユーザーがサーバー・プロパティを"ipp_printer"配信に対して指定しない場合は、デフォルト・サーバーに定義されたサーバー・プロパティが使用されます。
次のプロパティが<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>
次の要素が<server type="smtp_email">でサポートされています。
<host>
<port>
<uri>
<username>
<password>
<authType>
<filter>
次の要素が<server type="webdav">でサポートされています。
<host>
<port>
<uri>
<username>
<password>
<authType>
<encType>
<proxyHost>
<proxyPort>
<proxyUsername>
<proxyPassword>
<proxyAuthType>
<filter>
次の要素が<server type="ftp">および<server type="sftp">でサポートされています。
<host>
<port>
<uri>
<username>
<password>
<filter>
次の要素が<server type="external">でサポートされています。
<command>
<filter>