2.4.1 基本的なコーディング方法(Webサービスサーバ)
ここでは、Amazon S3出力機能のコーディングに関して説明するため、biz-Streamライブラリを利用したPDFを生成するユーザ・アプリケーションがすでにあるものとします。
アプリケーションの開発方法およびレイアウトの作成方法に関しては「Webサービスサーバガイド」や「レイアウト・デザイナ ガイド」をご覧ください。
Amazon S3へ出力を行うためには、既存のPDF生成アプリケーションに対して、PDF生成エンジンの出力先に指定していた出力ストリームを AmazonS3OutputStream のインスタンスに変更します。
PDFを生成しリポジトリに格納するサンプルプログラム
/**
* PDFを生成しリポジトリに格納
*
* @return GenerateOutputResponse
*/
private GenerateOutputResponse generate() throws Exception {
// クライアントを生成
Bizstream service = new Bizstream(new URL(WSS_SERVICE_LOCATION + "/bizstream?wsdl"));
// MTOMを有効化
WebServiceFeature feature = new MTOMFeature(true);
BizstreamPortType type = service.getBizstreamSOAP11Port(feature);
BindingProvider bp = (BindingProvider) type;
Map<String, Object> reqContext = bp.getRequestContext();
reqContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
WSS_SERVICE_LOCATION + "/bizstream?UserDef=" + USER_DEF);
// リクエストメッセージの作成
GenerateOutputRequest request = new GenerateOutputRequest();
// 出力ファイルの種類を設定
Repository repository = new Repository();
repository.setFilePath(TARGET_FILE_PATH);
Pdf pdf = new Pdf();
pdf.setRepository(repository);
Output output = new Output();
output.setPdf(pdf);
request.setOutput(output);
// レイアウト定義を設定
LayoutData layoutData = new LayoutData();
LayoutDefinition layout = new LayoutDefinition();
layout.setUri(LAYOUT_FILE);
layoutData.getLayoutDefinition().add(layout);
request.setLayoutData(layoutData);
// リクエストを送信
return type.generateOutput(request);
}
これを Amazon S3へ出力するサンプルに移行する場合、次の赤行のような変更を加えることになります。
(PDFインスタンスに AmazonS3 インスタンスを設定します)
PDFを生成しAmazon S3へ出力するサンプルプログラム
/**
* PDFを生成しAmazon S3に格納する
*
* @return GenerateOutputResponse
*/
private GenerateOutputResponse generateOutput() throws Exception {
// クライアントを生成
Bizstream service = new Bizstream(new URL(WSS_SERVICE_LOCATION + "/bizstream?wsdl"));
// MTOMを有効化
WebServiceFeature feature = new MTOMFeature(true);
BizstreamPortType type = service.getBizstreamSOAP11Port(feature);
BindingProvider bp = (BindingProvider) type;
Map<String, Object> reqContext = bp.getRequestContext();
reqContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
WSS_SERVICE_LOCATION + "/bizstream?UserDef=" + USER_DEF);
// リクエストメッセージの作成
GenerateOutputRequest request = new GenerateOutputRequest();
AmazonS3 s3 = new AmazonS3();
// s3.setAccessKey("xxx"); // アクセスキー (API指定は非推奨)
// s3.setSecretKey("xxx"); // シークレットキー (API指定は非推奨)
// s3.setServiceEndpoint("s3.amazonaws.com"); // サービスエンドポイント
// s3.setRegion("ap-northeast-1"); // リージョン
// s3.setBucketName("BucketName"); // バケット名 (バケットは事前に作成しておくこと)
// s3.setProxyHost("proxy"); // プロキシホスト名
// s3.setProxyPort(8080); // プロキシポート番号
s3.setFilePath(TARGET_FILE_PATH); // バケット内のファイルパス (必須)
Tags tags = new Tags();
for (int i = 1; i <= 10; i++) {
// タグは10個まで設定可能
Tag tag = new Tag();
tag.setKey("key" + i); // タグのキー
tag.setValue("value" + i); // タグの値
tags.getTag().add(tag);
}
s3.setTags(tags);
Pdf pdf = new Pdf();
pdf.setAmazonS3(s3);
Output output = new Output();
output.setPdf(pdf);
request.setOutput(output);
// レイアウト定義を設定
LayoutData layoutData = new LayoutData();
LayoutDefinition layout = new LayoutDefinition();
layout.setUri(LAYOUT_FILE);
layoutData.getLayoutDefinition().add(layout);
request.setLayoutData(layoutData);
// リクエストを送信
return type.generateOutput(request);
}
