ページの先頭行へ戻る
Interstage Host Access Service V10.0.1 ユーザーズガイド
Interstage

23.3.4 在庫照会サンプルアプリケーション

在庫照会を想定したサンプルアプリケーションです。

23.3.4.1 概要

本サンプルアプリケーションは、Webサービス経由でホストに接続を行い、ホストに対し入力データを通知します。また、在庫照会を行ってホストからデータを取得し、画面に表示します。

23.3.4.2 アプリケーションの画面表示部

ログオン画面

入力されたログオンIDとパスワードを使用して、Webサービスを呼び出します。

在庫結果表示画面

Webサービス経由でホストから在庫照会結果を取得し、結果を表示します。

23.3.4.3 アプリケーションのWebサービス呼び出し部

アプリケーションのWebサービス呼び出し部のソースコード(IHASWSClient.java)について説明します。サンプルアプリケーションのソース全体については添付のソースコードを参照してください。

IHASWSClient.java

Webサービスを呼び出すクラスです。

パラメタのXML文書を作成して、Webサービスが公開しているexec()を呼び出し、返却値のXML文書から値を取り出してBeanに格納します。

/*
 * @(#)IHASWSClient.java        1.00 2008/06/06
 *
 * Interstage Host Access Service(IHAS)
 *                       COPYRIGHT FUJITSU LIMITED 2008.
 *                       
 */
package control;

import java.io.StringReader;
import java.io.StringWriter;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

import bean.HyojiBean;
import bean.ZaikoBean;

import com.fujitsu.interstage.has.webservice.IHASWS;
import com.fujitsu.interstage.has.webservice.IHASWSService;
/**
 * Webサービスの呼び出しを行いシナリオを実行するクラスです.
 * @author FUJITSU LIMITED
 */
public class IHASWSClient {

    /**
     * コンストラクタ
     */
    public IHASWSClient() {
    }
   
    /**
     * execメソッド
     * @param userId
     * @param pswd
     */

    public static HyojiBean exec(String userId, String pswd) {
        IHASWSClient client = new IHASWSClient();
        HyojiBean objBean = new HyojiBean();
        int code = -1;
        String key = "";
        String errmsg = "";
        try {
            // XML文書を生成する
            Document doc = client.createParameterXML();
            
//            client.setParameterString(doc, "userid", userId);
//            client.setParameterString(doc, "userpw", pswd);

            // XML文書のStringに変換する
            StringWriter sw = new StringWriter();
            TransformerFactory tfactory = TransformerFactory.newInstance();
            Transformer transformer = tfactory.newTransformer();
            transformer.transform(new DOMSource(doc), new StreamResult(sw));

            // Webサービスの呼び出し
            ServiceFactory serviceFactory = ServiceFactory.newInstance();
            IHASWSService service = (IHASWSService) serviceFactory.loadService(IHASWSService.class);
            IHASWS server = service.getIHASWSPort();
            String ret = server.exec("在庫管理/在庫照会", "PATH000", sw.toString());
            
            // 戻り値のStringをDOMに変換する
            DocumentBuilderFactory dbfactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder docbuilder = dbfactory.newDocumentBuilder();
            Document ret_doc = docbuilder.newDocument();
            StringReader sr = new StringReader(ret);
            transformer.transform(new StreamSource(sr), new DOMResult(ret_doc));

            // 戻り値を表示する
            code = client.getCode(ret_doc);
            if (code == 0) {
                // codeが0なら正常終了
//                // string型の戻り値
//                String value1 = client.getString(ret_doc, "retkey1");
//                if (value1 != null) {
//                    System.out.println("---retkey1---");
//                    System.out.println(value1);
//                    System.out.println("-------------");
//                }
//                // stringList型の戻り値
//                List<String> value2 = client.getList(ret_doc, "retkey2");
//                if (value2 != null) {
//                    System.out.println("---retkey2---");
//                    for (int i = 0; i < value2.size(); i++) {
//                        System.out.println(value2.get(i));
//                    }
//                    System.out.println("-------------");
//                }
                // stringTable型の戻り値
                List<List<String>> value3 = client.getTable(ret_doc, "data");
                if (value3 != null) {
                    for (int i = 0; i < value3.size(); i++) {
                        List<String> row = value3.get(i);
                        ZaikoBean lRetBean = new ZaikoBean();
                        lRetBean.setNo(row.get(0));
                        lRetBean.setOrderNo(row.get(1));
                        lRetBean.setOrderDay(row.get(2));
                        lRetBean.setCustomerName(row.get(3));
                        lRetBean.setPersonCharge(row.get(4));
                        lRetBean.setBikou(row.get(5));
                        objBean.setObjList(lRetBean);
                    }
                }
                // エラーフラグ設定
                objBean.setErrFlg(false);
            } else {
                // エラーの場合
                errmsg = client.getException(ret_doc);
                key = client.getKey(ret_doc);
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
            errmsg = e.getMessage();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
            errmsg = e.getMessage();
        } catch (TransformerException e) {
            e.printStackTrace();
            errmsg = e.getMessage();
        } catch (ServiceException e) {
            e.printStackTrace();
            errmsg = e.getMessage();
        } catch (RemoteException e) {
            e.printStackTrace();
            errmsg = e.getMessage();
        }
        // コード設定
        objBean.setCode(code);
        // キー名設定
        objBean.setKey(key);
        // メッセージ設定
        objBean.setMessage(errmsg);
        
        return objBean;
    }

    /**
     * XML文書を生成する
     * 
     * @return 生成されたXML文書
     * @throws ParserConfigurationException
     */
    private Document createParameterXML() throws ParserConfigurationException {
    …詳細は別途説明するため省略…
    }

    /**
     * String型の入力値を設定する
     * @param doc XML文書
     * @param key 入力値のキー
     * @param value 入力値
     */
    private void setParameterString(Document doc, String key, String value) {
    …詳細は別途説明するため省略…
    }

    /**
     * リターンコードを取得する
     * @param doc XML文書
     * @return リターンコード
     */
    private int getCode(Document doc) {
    …詳細は別途説明するため省略…
    }

    /**
     * エクセプションを取得する
     * @param doc XML文書
     * @return エクセプション
     */
    private String getException(Document doc) {
    …詳細は別途説明するため省略…
    }

    /**
     * エクセプションが発生したキーを取得する
     * @param doc XML文書
     * @return key
     */
    private String getKey(Document doc) {
    …詳細は別途説明するため省略…
    }

    /**
     * String型の値を取得する
     * @param doc XML文書
     * @param key 取得する値のキー
     * @return 取得したString型の値。見つからない場合はnull。
     */
    private String getString(Document doc, String key) {
    …詳細は別途説明するため省略…
    }

    /**
     * StringList型の値を取得する
     * @param doc XML文書
     * @param key 取得する値のキー
     * @return 取得したStringのListの値。見つからない場合はnull。
     */
    private List<String> getList(Document doc, String key) {
    …詳細は別途説明するため省略…
    }

    /**
     * StringTable型の値を取得する
     * @param doc XML文書
     * @param key 取得する値のキー
     * @return 取得したStringのListのListの値。見つからない場合はnull。
     */
    private List<List<String>> getTable(Document doc, String key) {
    …詳細は別途説明するため省略…
    }

    /**
     * getLst
     * @return lst
     */
    public List<String> getLst() {
        return this.lst; 
    }

    /**
     * setLst
     * @param lst 設定する lst
     */
    public void setLst(List<String> lst) {
        this.lst = lst; 
    }

    /**
     * getStrParam
     * @return strParam
     */
    public String getStrParam() {
        return this.strParam;
    }

    /**
     * setStrParam
     * @param strParam 設定する strParam
     */
    public void setStrParam(String strParam) {
        this.strParam = strParam;
    }

    /**
     * getTbl
     * @return tbl
     */
    public List<List<String>> getTbl() {
        return this.tbl; 
    }

    /**
     * setTbl
     * @param tbl 設定する tbl
     */
    public void setTbl(List<List<String>> tbl) {
        this.tbl = tbl; 
    }

IHASWSClient.createParameterXML()

exec()メソッドのパラメタに指定するXML文書を生成します。

パラメタにもcode、exception、keyのノードを設定する必要があります。

    /**
     * XML文書を生成する
     * 
     * @return 生成されたXML文書
     * @throws ParserConfigurationException
     */
    private Document createParameterXML() throws ParserConfigurationException {
        // Documentの生成
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docbuilder = dbfactory.newDocumentBuilder();
        Document doc = docbuilder.newDocument();

        // ルート要素
        Element root = doc.createElementNS("urn:xmlns-fujitsu-com:ihas2008-06", "parameters");
        doc.appendChild(root);

        // codeのノード
        Element codeNode = doc.createElement("code");
        Text code = doc.createTextNode("0");
        codeNode.appendChild(code);
        root.appendChild(codeNode);

        // exceptionのノード
        Element exceptionNode = doc.createElement("exception");
        Text exceptioNcode = doc.createTextNode("");
        exceptionNode.appendChild(exceptioNcode);
        root.appendChild(exceptionNode);

        // keyのノード
        Element keyNode = doc.createElement("key");
        Text keyCode = doc.createTextNode("");
        keyNode.appendChild(keyCode);
        root.appendChild(keyNode);

        return doc;
    }

IHASWSClient.setParameterSting()

パラメタに指定するXML文書に、String型の値を設定するメソッドです。

    /**
     * String型の入力値を設定する
     * @param doc XML文書
     * @param key 入力値のキー
     * @param value 入力値
     */
    private void setParameterString(Document doc, String key, String value) {
        // パラメタのノード
        Element paramNode = doc.createElement("param");
        paramNode.setAttribute("valueType", "string");
        // キー
        Element keyNode = doc.createElement("key");
        Text keyText = doc.createTextNode(key);
        keyNode.appendChild(keyText);
        // 値
        Element valueNode = doc.createElement("value");
        Element stringNode = doc.createElement("string");
        Text valueText = doc.createTextNode(value);
        stringNode.appendChild(valueText);
        valueNode.appendChild(stringNode);
        // XML文書に追加
        paramNode.appendChild(keyNode);
        paramNode.appendChild(valueNode);
        doc.getDocumentElement().appendChild(paramNode);
    }

IHASWSClient.getCode()

戻り値のXML文書から、codeを取得するメソッドです。

    /**
     * リターンコードを取得する
     * @param doc XML文書
     * @return リターンコード
     */
    private int getCode(Document doc) {
        NodeList list = doc.getElementsByTagName("code");
        Element codeNode = (Element) list.item(0);
        Text code = (Text) codeNode.getFirstChild();
        return Integer.parseInt(code.getNodeValue());
    }

IHASWSClient.getException()

戻り値のXML文書から、exceptionを取得するメソッドです。

    /**
     * エクセプションを取得する
     * @param doc XML文書
     * @return エクセプション
     */
    private String getException(Document doc) {
        NodeList list = doc.getElementsByTagName("exception");
        Element exceptionNode = (Element) list.item(0);
        return ((Text) exceptionNode.getFirstChild()).getNodeValue();
    }

IHASWSClient.getKey()

戻り値のXML文書から、keyを取得するメソッドです。

    /**
     * エクセプションが発生したキーを取得する
     * @param doc XML文書
     * @return key
     */
    private String getKey(Document doc) {
        NodeList list = doc.getElementsByTagName("key");
        Element keyNode = (Element) list.item(0);
        return ((Text) keyNode.getFirstChild()).getNodeValue();
    }

IHASWSClient.getString()

戻り値のXML文書から、指定されたキーを持つString型の値を取得するメソッドです。

    /**
     * String型の値を取得する
     * @param doc XML文書
     * @param key 取得する値のキー
     * @return 取得したString型の値。見つからない場合はnull。
     */
    private String getString(Document doc, String key) {
        NodeList list = doc.getElementsByTagName("param");
        for (int i = 0; i < list.getLength(); i++) {
            Element param = (Element) list.item(i);
            if (param.getAttribute("valueType").equals("string")) {
                // 戻り値のkeyを取得
                NodeList keyList = param.getElementsByTagName("key");
                Element keyNode = (Element) keyList.item(0);
                if (((Text) keyNode.getFirstChild()).getNodeValue().equals(key)) {
                    // キーが見つかったら値を取得して返却
                    NodeList valueList = param.getElementsByTagName("value");
                    Element valueNode = (Element) valueList.item(0);
                    NodeList temp = valueNode.getElementsByTagName("string");
                    Element stringNode = (Element) temp.item(0);
                    return ((Text) stringNode.getFirstChild()).getNodeValue();
                }
            }
        }
        return null;
    }

IHASWSClient.getList()

戻り値のXML文書から、指定されたキーを持つStringList型の値を取得するメソッドです。

    /**
     * StringList型の値を取得する
     * @param doc XML文書
     * @param key 取得する値のキー
     * @return 取得したStringのListの値。見つからない場合はnull。
     */
    private List<String> getList(Document doc, String key) {
        NodeList list = doc.getElementsByTagName("param");
        for (int i = 0; i < list.getLength(); i++) {
            Element param = (Element) list.item(i);
            if (param.getAttribute("valueType").equals("stringList")) {
                // 戻り値のkeyを取得
                NodeList keyList = param.getElementsByTagName("key");
                Element keyNode = (Element) keyList.item(0);
                if (((Text) keyNode.getFirstChild()).getNodeValue().equals(key)) {
                    // キーが見つかったら値を取得して返却
                    NodeList valueList = param.getElementsByTagName("value");
                    Element valueNode = (Element) valueList.item(0);
                    NodeList temp = valueNode.getElementsByTagName("stringList");
                    if (temp.getLength() == 0) {
                        // 値がstringList型でなければnull。
                        return null;
                    }
                    Element stringListNode = (Element) temp.item(0);
                    NodeList colList = stringListNode.getElementsByTagName("col");
                    ArrayList<String> result = new ArrayList<String>(colList.getLength());
                    for (int j = 0; j < colList.getLength(); j++) {
                        Element colNode = (Element) colList.item(j);
                        result.add(j, ((Text) colNode.getFirstChild()).getNodeValue());
                    }
                    return result;
                }
            }
        }
        return null;
    }

IHASWSClient.getTable()

戻り値のXML文書から、指定されたキーを持つStringTable型の値を取得するメソッドです。

    /**
     * StringTable型の値を取得する
     * @param doc XML文書
     * @param key 取得する値のキー
     * @return 取得したStringのListのListの値。見つからない場合はnull。
     */
    private List<List<String>> getTable(Document doc, String key) {
        NodeList list = doc.getElementsByTagName("param");
        for (int i = 0; i < list.getLength(); i++) {
            Element param = (Element) list.item(i);
            if (param.getAttribute("valueType").equals("stringTable")) {
                // 戻り値のkeyを取得
                NodeList keyList = param.getElementsByTagName("key");
                Element keyNode = (Element) keyList.item(0);
                if (((Text)keyNode.getFirstChild()).getNodeValue().equals(key)) {
                    // キーが見つかったら値を取得して返却
                    NodeList valueList = param.getElementsByTagName("value");
                    Element valueNode = (Element) valueList.item(0);
                    NodeList temp = valueNode.getElementsByTagName("stringTable");
                    if (temp.getLength() == 0) {
                        // 値がstringTable型でなければnull。
                        return null;
                    }
                    Element stringTableNode = (Element) temp.item(0);
                    NodeList rowList = stringTableNode.getElementsByTagName("row");
                    ArrayList<List<String>> result = new ArrayList<List<String>>(rowList.getLength());
                    for (int j = 0; j < rowList.getLength(); j++) {
                        NodeList colList = ((Element) rowList.item(j)).getElementsByTagName("col");
                        ArrayList<String> stringList = new ArrayList<String>(colList.getLength());
                        for (int k = 0; k < colList.getLength(); k++) {
                            Element colNode = (Element) colList.item(k);
                            stringList.add(k, ((Text) colNode.getFirstChild()).getNodeValue());
                        }
                        result.add(j, stringList);
                    }
                    return result;
                }
            }
        }
        return null;
    }