11.8 CSV を生成しファイルシステムへ保存するサンプル(JAX-WS)
概要
CSVを生成しファイルシステムへ保存するサンプルプログラムです
ソースサンプル
<biz-Stream_home>/sample/soap_client/java/jax-ws/WSS_JAXWS_Sample7.java
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 javax.xml.ws.BindingProvider;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.soap.MTOMFeature;
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;
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 + "/soap_client/xml/Sample6.xml";
// 出力ファイル名
private static final String OUTPUT_FILE = "C:/Temp/WSS_JAXWS_Sample7.csv";
/**
* @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();
dataType.setCsv(new 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();
}
}
