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); }