在庫照会を想定したサンプルアプリケーションです。
本サンプルアプリケーションは、Webサービス経由でホストに接続を行い、ホストに対し入力データを通知します。また、在庫照会を行ってホストからデータを取得し、画面に表示します。
ログオン画面
入力されたログオンIDとパスワードを使用して、Webサービスを呼び出します。
在庫結果表示画面
Webサービス経由でホストから在庫照会結果を取得し、結果を表示します。
アプリケーションのWebサービス呼び出し部のソースコード(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); }
戻り値の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()); }
戻り値の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(); }
戻り値の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(); }
戻り値の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; }
戻り値の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; }
戻り値の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; }