biz-StreamマニュアルWebサービスサーバ ガイド第11章 サンプルプログラム(Java)11.3 CSVをリソースとしてPDFを生成しブラウザでダウンロードさせるサンプル(JAX-WS)

11.3 CSVをリソースとしてPDFを生成しブラウザでダウンロードさせるサンプル(JAX-WS)

概要

CSVをリソースとしてPDFを生成しブラウザでダウンロードさせるサンプルプログラムです。


スタブクラスの準備

事前に『11.1 Java で開発するための環境構築』の手順を実行します。


ソースサンプル

<biz-Stream_home>/sample/soap_client/java/jax-ws/WSS_JAXWS_Sample2.java サンプル2



    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Authenticator;
    import java.net.PasswordAuthentication;
    import java.net.URL;
    import java.util.Map;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    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 com.brainsellers.schemas.webservices.bizstream._2006_10.CsvData;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.CsvFile;
    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.bizstream._2006_10.Pdf;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.Resource;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.ResourceData;
    import com.brainsellers.schemas.webservices.common._2006_10.FileData;




    public class WSS_JAXWS_Sample2 extends HttpServlet {

       // 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/Sample2-doc.xml";

       // Webサービスサーバ上の入力CSVファイルパス
       private static final String CSV_FILE_PATH = WSS_BIZSTREAM_SAMPLE_DIR + "/soap_client/xml/Sample2-1.csv";

       // ドキュメントレイアウト内のcsv-resource-master名
       private static final String CSV_RESOURCE_MASTER = "csv-resource";

       private static final String RESOURCE_NAME = "resourceData";

       // ダウンロードファイル名
       private static final String DOWNLOAD_FILE_NAME = "WSS_JAXWS_Sample2.pdf";


       /**
        * @see HttpServlet#HttpServlet()
        */
       public WSS_JAXWS_Sample2() {
           super();
       }

       /**
        * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
        *      response)
        */
       protected void doGet(HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws ServletException, IOException {
           try {
               // 認証の設定
               setAuth();

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

               // HTTPヘッダを設定する
               httpResponse.setCharacterEncoding("Windows-31J");
               httpResponse.setContentType("application/pdf");
               httpResponse.setContentLength(data.length);
               httpResponse.addHeader("Accept-Ranges", "bytes");
               httpResponse.addHeader("Content-Disposition", "attachment; filename=\"" + DOWNLOAD_FILE_NAME + "\"");

               // PDFをストリームに書き出す
               DataOutputStream out_res = new DataOutputStream(httpResponse.getOutputStream());
               out_res.write(data);
               out_res.close();
           } catch (Exception e) {
               e.printStackTrace();
               throw new ServletException(e);
           }
       }

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

       /**
        * データソースにCSVを利用して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.setPdf(new Pdf());
           request.setDataType(dataType);

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

           // レイアウト定義に流し込むデータを設定
           Resource resource = new Resource();
           ResourceData resourceData = makeResourceData();
           resource.getResourceData().add(resourceData);
           request.setResource(resource);

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

           return data.getContentData().getValue();
       }

       /**
        *  リソースの設定
        *
        *  @return ResourceData
        */
       private ResourceData makeResourceData() throws Exception {
           ResourceData resourceData = new ResourceData();
           resourceData.setName(RESOURCE_NAME);

           CsvData csvData = new CsvData();
           // ドキュメントレイアウト内のリソース名を指定
           csvData.setMasterName(CSV_RESOURCE_MASTER);
           CsvFile csvFile = new CsvFile();
           // 設定するWSS上のCSVファイルのパスを指定
           csvFile.setUrl(CSV_FILE_PATH);
           csvData.setCsvFile(csvFile);
           resourceData.getCsvData().add(csvData);

           return resourceData;
       }

    }