biz-Streamマニュアル Webサービスサーバ ガイド 第11章 サンプルプログラム(Java) 11.13 PDFを生成しAmazon S3へ格納するサンプルプログラム(JAX-WS)

11.13 PDFを生成しAmazon S3へ格納するサンプルプログラム(JAX-WS)

概要

PDFを生成しAmazon S3へ格納するサンプルプログラムです。

環境準備

事前に『2.7 クライアントアプリケーションの環境構築』を確認してください。


サンプル構成

項目 ファイルパス
ソースサンプル <bswss-client_home>/sample/java/jax-ws/WSS_JAXWS_Sample13.java サンプル1

ソースサンプル

import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.Map;

import org.apache.ws.axis2.Bizstream;
import org.apache.ws.axis2.BizstreamPortType;

import com.brainsellers.schemas.webservices.bizstream._2006_10.AmazonS3;
import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateOutputRequest;
import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateOutputResponse;
import com.brainsellers.schemas.webservices.bizstream._2006_10.LayoutData;
import com.brainsellers.schemas.webservices.bizstream._2006_10.LayoutDefinition;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Output;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Pdf;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Tag;
import com.brainsellers.schemas.webservices.bizstream._2006_10.Tags;

import jakarta.xml.ws.BindingProvider;
import jakarta.xml.ws.WebServiceFeature;
import jakarta.xml.ws.soap.MTOMFeature;


public class WSS_JAXWS_Sample13 {

	// Webサービスサーバのホスト名
	private static final String WSS_HOST_NAME = "wsssrv";

	// Webサービスサーバ上のサンプルディレクトリの場所
	private static final String BIZSTREAM_SAMPLE_DIR = "/bs/sample";

	// Webサービスのエンドポイントプリフィックス
	private static final String WSS_SERVICE_LOCATION = "http://" + WSS_HOST_NAME + ":8080/axis2/services";

	// BASIC認証のユーザ名
	private static final String USER_NAME = "bizuser1";

	// BASIC認証のパスワード
	private static final String PASSWORD = "bizuser1";

	// 監査ロギング用のユーザ定義
	private static final String USER_DEF = "AAA";

	// Webサービスサーバ上の入力レイアウト定義ファイルパス
	private static final String LAYOUT_FILE = BIZSTREAM_SAMPLE_DIR + "/xml/Sample1.xml";

	// 格納するファイルのバケット内のパス (先頭に/は不要)
	private static final String TARGET_FILE_PATH = "Sample/WSS_JAXWS_Sample13.pdf";


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new WSS_JAXWS_Sample13();
	}

	/**
	 * メイン
	 */
	public WSS_JAXWS_Sample13() {
		try {
			// 認証を設定
			setAuth();

			// Amazon S3にPDFファイルを格納
			GenerateOutputResponse response = generateOutput();

			// レスポンスより格納したファイルの情報を取得
			AmazonS3 s3 = response.getAmazonS3();
			String region = s3.getRegion();         // リージョン
			String bucketName = s3.getBucketName(); // バケット名
			String filePath = s3.getFilePath();     // ファイルパス
			System.out.println("region=" + region + ", bucketName=" + bucketName + ", filePath=" + filePath);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 認証の設定
	 */
	private void setAuth() {
		Authenticator.setDefault(new Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(USER_NAME, PASSWORD.toCharArray());
			}
		});
	}

	/**
	 * 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();

		// Amazon S3への格納設定
		// ・下記のようなAPI指定の他にcloud_storage.propertiesファイルでの指定が可能
		// ・特にアクセスキーとシークレットキーはセキュリティ上cloud_storage.propertiesファイルにて設定すること
		// ・APIとpropertiesファイルと両方指定している場合はAPI指定が優先される
		// ・ファイルパスはAPIでの指定が必須
		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);
	}
}