biz-Streamマニュアル Webサービスサーバ ガイド 第11章 サンプルプログラム(Java) 11.10 PDFを生成しバッチ印刷するサンプル(JAX-WS)

11.10 PDFを生成しバッチ印刷するサンプル(JAX-WS)

概要

バッチ印刷モジュールを利用するサンプルプログラムです。


スタブクラスの準備

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


サンプル構成

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

ソースサンプル


    import java.io.IOException;
    import java.io.PrintWriter;
    import java.math.BigInteger;
    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.BatchPrint;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.DoPrint;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.Error;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateOutputDataRequest;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.GenerateOutputDataResponse;
    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.PrintResult;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.PrintStatus;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.PrintStatuses;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.Printer;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.Query;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.QueryResult;
    import com.brainsellers.schemas.webservices.bizstream._2006_10.Status;



    public class WSS_JAXWS_Sample10 extends HttpServlet {

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

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

        // 印刷サーバのホスト名
        private static final String PRINT_HOST_NAME = "prntsrv";

        // 印刷サービスのエンドポイントプリフィックス
        private static final String PRINT_SERVICE_LOCATION = "http://" + PRINT_HOST_NAME + ":3000/";

        // プリンタ名
        private static final String PRINTER_NAME = "Bullzip PDF Printer";


        // HTTP Get リクエストの処理
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                // 認証の設定
                setAuth();

                // バッチ印刷のストリームへ出力
                GenerateOutputDataResponse dataResponse = generate();

                // 印刷結果取得のためjobIDを取得
                PrintResult printResult = dataResponse.getPrintResult();
                String jobID = printResult.getJobId();

                // バッチ印刷のレスポンスを取得
                // 本サンプルはプリンタの印刷完了を待たないので「印刷待ち」や「印刷中」となる場合があります
                QueryResult batchStatus = getBatchResult(jobID);
                PrintStatuses printStatuses = batchStatus.getPrintStatuses();
                PrintStatus printStatus = printStatuses.getPrintStatus().get(0);

                // ステータス
                Status status = printStatus.getStatus();
                String result = status.getValue();
                String statusCode = status.getCode();

                // 情報取得日時
                String dateTime = printStatus.getDateTime();

                // プリンタ情報
                Printer printer = printStatus.getPrinter();
                String printerName = printer.getName();
                String jobName = printer.getJobName();

                // エラー情報
                Error error = printStatus.getError();
                String errCause = error.getCause();
                BigInteger errCode = error.getCode();
                String errDetail = error.getDetails();

                // ブラウザに結果を表示
                response.setContentType("text/html;charset=UTF-8");
                response.setCharacterEncoding("UTF-8");
                PrintWriter pw = response.getWriter();
                pw.println("<HTML><HEAD><TITLE>WSS_JAXWS_Sample10</TITLE></HEAD><BODY>");
                pw.println("<BR>RESULT = " + result);
                pw.println("<BR>STATUS_CODE = " + statusCode);
                pw.println("<BR>DATE_TIME = " + dateTime);
                pw.println("<BR>PRINTER_NAME = " + printerName);
                pw.println("<BR>JOB_NAME = " + jobName);
                pw.println("<BR>ERROR_CODE = " + errCode);
                pw.println("<BR>ERROR_CAUSE = " + errCause);
                pw.println("<BR>ERROR_DETAILS = " + errDetail);
                pw.println("<BR></BODY></HTML>");
                pw.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());
                }
            });
        }

        /**
         * PDFを生成してバッチ印刷を実行する
         *
         * @return GenerateOutputDataResponse
         */
        private GenerateOutputDataResponse 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);

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

            // バッチ印刷の出力を設定
            Output output = new Output();
            BatchPrint batchPrint = new BatchPrint();
            DoPrint doPrint = new DoPrint();
            Printer printer = new Printer();
            doPrint.setUrl(PRINT_SERVICE_LOCATION);
            batchPrint.setDoPrint(doPrint);
            // プリンタ名
            printer.setName(PRINTER_NAME);
            // ジョブ名
            printer.setJobName("WSS_JAXWS_Sample10");
            // 印刷部数
            printer.setNumberOfCopy("1");
            // 出力トレイ
            printer.setSelectedTray("AUTO");
            // 開始ページ番号
            printer.setFromPage("1");
            // 終了ページ番号
            printer.setToPage("-1");
            // sppファイル暗号化パスワード
    //        printer.setPassword("password");
            // エンコード済み暗号化パスワード
    //        printer.setPasswordWithEncoded("cGFzc3dvcmQ=");
            // 用紙に合わせて印刷する
            printer.setDoFit("true");
            batchPrint.setPrinter(printer);
            output.setBatchPrint(batchPrint);
            request.setOutput(output);

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

            // リクエストを送信
            return type.generateOutputData(request);
        }

        /**
         * バッチ印刷のステータスを取得
         *
         * @param jobID
         * @return QueryResult
         */
        private QueryResult getBatchResult(String jobID) 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);

            // ジョブIDを設定
            Query query = new Query();
            query.setUrl( PRINT_SERVICE_LOCATION);
            query.getJobId().add(jobID);

            // リクエストを送信
            return type.getBatchStatus(query);
        }

    }