11.3 DB をリソースとしてPDFを生成しブラウザでダウンロードさせるサンプル(JAX-WS)
概要
DBをリソースとしてPDFを生成しブラウザでダウンロードさせるサンプルプログラムです。
サンプル構成
| 項目 | ファイルパス |
|---|---|
| ドキュメントレイアウトサンプル |
<bswss-client_home>/sample/xml/Sample3-doc.xml
|
| ページレイアウトサンプル |
<bswss-client_home>/sample/xml/Sample3-page.xml
|
| ソースサンプル |
<bswss-client_home>/java/jax-ws/WSS_JAXWS_Sample3.java
|
| 出力結果サンプル |
WSS_JAXWS_Sample3.pdf
|
ソースサンプル
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 org.apache.ws.axis2.Bizstream;
import org.apache.ws.axis2.BizstreamPortType;
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.QueryParameter;
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;
import jakarta.xml.ws.BindingProvider;
import jakarta.xml.ws.WebServiceFeature;
import jakarta.xml.ws.soap.MTOMFeature;
public class WSS_JAXWS_Sample3 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/Sample3-doc.xml";
private static final String RESOURCE_NAME = "data-source";
// ドキュメントレイアウト内のquery-master名
private static final String QUERY_MASTER = "sql-statement";
// ダウンロードファイル名
private static final String DOWNLOAD_FILE_NAME = "WSS_JAXWS_Sample3.pdf";
/**
* @see HttpServlet#HttpServlet()
*/
public WSS_JAXWS_Sample3() {
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());
}
});
}
/**
* データソースにDBを利用して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);
QueryParameter queryParam = new QueryParameter();
// ドキュメントレイアウト内のリソース名を指定
queryParam.setMasterName(QUERY_MASTER);
resourceData.getQueryParameter().add(queryParam);
return resourceData;
}
}
