11.11 PDFを生成しバッチ印刷するサンプル(JAX-WS)
概要
バッチ印刷モジュールを利用するサンプルプログラムです
ソースサンプル
<biz-Stream_home>/sample/soap_client/java/jax-ws/WSS_JAXWS_Sample10.java
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";
// 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/Cloud/CloudSample1.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);
}
}
