biz-Streamマニュアル Webサービスサーバ ガイド 第11章 サンプルプログラム(Java) 11.7 CSV を生成しファイルシステムへ保存するサンプル(JAX-WS)

11.7 CSV を生成しファイルシステムへ保存するサンプル(JAX-WS)

概要

CSVを生成しファイルシステムへ保存するサンプルプログラムです。


環境準備

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


サンプル構成

項目 ファイルパス
ページレイアウトサンプル <bswss-client_home>/sample/xml/Sample6.xml サンプル1
ソースサンプル <bswss-client_home>/sample/java/jax-ws/WSS_JAXWS_Sample7.java サンプル1

ソースサンプル

import java.io.FileOutputStream;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Map;

import org.apache.ws.axis2.Bizstream;
import org.apache.ws.axis2.BizstreamPortType;
import org.w3._2005._05.xmlmime.Base64Binary;

import com.brainsellers.schemas.webservices.bizstream._2006_10.Csv;
import com.brainsellers.schemas.webservices.bizstream._2006_10.DataType;
import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateDataRequest;
import com.brainsellers.schemas.webservices.bizstream._2006_10.LayoutData;
import com.brainsellers.schemas.webservices.bizstream._2006_10.LayoutDefinition;
import com.brainsellers.schemas.webservices.common._2006_10.FileData;

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



public class WSS_JAXWS_Sample7 {

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

	// Webサービスサーバ上のサンプルディレクトリの場所
	private static final String WSS_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 = WSS_BIZSTREAM_SAMPLE_DIR + "/xml/Sample6.xml";

	// 出力先ファイルパス
	private static final String OUTPUT_FILE = "C:/Temp/WSS_JAXWS_Sample7.csv";

	// CSVファイルのエンコーディング
	private static final String ENCODING = "MS932";

	// CSVファイルの改行コード
	private static final String LINE_SEPARATOR = "CRLF";


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

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

			// データの生成
			byte[] data = generate();

			// 取得したファイルを書き出す
			FileOutputStream fos = new FileOutputStream(OUTPUT_FILE);
			fos.write(data);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

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

	/**
	 * アプリケーションでデータソースを設定してPDFを生成しダウンロードする
	 *
	 * @param
	 * @return byte[]
	 */
	private byte[] 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);

		// リクエストメッセージを作成
		GenerateDataRequest request = new GenerateDataRequest();

		// 出力ファイルの種類を生成
		DataType dataType = new DataType();
		Csv csv = new Csv();
		csv.setEncoding(ENCODING);
		csv.setLineSeparator(LINE_SEPARATOR);
		dataType.setCsv(csv);
		request.setDataType(dataType);

		// レイアウト定義を設定
		LayoutData layoutData = new LayoutData();
		LayoutDefinition layout = new LayoutDefinition();
		layout.setUri(LAYOUT_FILE);
		layoutData.getLayoutDefinition().add(layout);
		request.setLayoutData(layoutData);

		// リクエストを送信
		FileData data = type.generateData(request);

		/*
		 * CSV出力はFileData#getContentDataGroup()よりBase64Binaryの配列を取得する
		 * (CSVの1行が1配列要素となっている)
		 */
		// データサイズの計算
		ArrayList<Base64Binary> list = (ArrayList<Base64Binary>) data.getContentDataGroup().getContentData();
		int size = 0;
		for (int i = 0; i < list.size(); i++) {
			Base64Binary base64 = list.get(i);
			byte[] lineData = base64.getValue();
			size += lineData.length;
		}

		// CSVデータの連結
		ByteBuffer buffer = ByteBuffer.allocate(size);
		for (int i = 0; i < list.size(); i++) {
			Base64Binary base64 = list.get(i);
			byte[] lineData = base64.getValue();
			buffer.put(lineData);
		}
		return buffer.array();
	}
}