11.2 CSVをリソースとしてPDFを生成しブラウザでダウンロードさせるサンプル(JAX-WS)
概要
CSVをリソースとしてPDFを生成しブラウザでダウンロードさせるサンプルプログラムです。
サンプル構成
項目 | ファイルパス |
---|---|
ドキュメントレイアウトサンプル |
<bswss-client_home>/sample/xml/Sample2-doc.xml
![]() |
ページレイアウトサンプル |
<bswss-client_home>/sample/xml/Sample2-page.xml
![]() |
CSVデータサンプル |
<bswss-client_home>/sample/xml/Sample2-0.csv
![]() |
<bswss-client_home>/sample/xml/Sample2-1.csv
![]() |
|
ソースサンプル |
<bswss-client_home>/sample/java/jax-ws/WSS_JAXWS_Sample2.java
![]() |
ソースサンプル
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 + "/xml/Sample2-doc.xml"; // Webサービスサーバ上の入力CSVファイルパス private static final String CSV_FILE_PATH = WSS_BIZSTREAM_SAMPLE_DIR + "/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; } }