[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution

目次||

目次

概要

CSV(Comma Separated Values)は、レガシーシステムのデータ入出力によく使用されるフォーマットです。CSVを入力して、送信するServiceContentに変換する方法を解説します。

【PIPSenderCSV.java】

1 : import java.io.File;
2 : import java.io.FileInputStream;
3 : import java.io.FileReader;
4 : import java.util.Date;
5 : import java.util.Properties;
6 : 
7 : import com.ados.hestia.mapping.Translator;
8 : import com.ados.hestia.mapping.TranslatorFactory;
9 : import com.ados.hestia.parser.rnbm.access.Validator;
10 : import com.ados.hestia.parser.rnbm.exchange.Container;
11 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer;
12 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer;
13 : import com.ados.hestia.parser.rnbm.particle.ServiceContent;
14 : import com.ados.hestia.repository.MapRuleStore;
15 : import com.ados.hestia.repository.Mapping;
16 : import com.ados.hestia.sdk.Configuration;
17 : import com.ados.hestia.sdk.Connection;
18 : import com.ados.hestia.sdk.message.DirectMessageExchanger;
19 : import com.ados.hestia.sdk.session.InitiationSession;
20 : import com.ados.hestia.sdk.session.Session;
21 : import com.ados.hestia.utils.UID;
22 : import com.ados.hestia.utils.csv.Parser;
23 : import com.ados.hestia.utils.csv.ParserImpl;
24 : import com.ados.hestia.utils.csv.RecordSet;
25 : 
26 : public class PIPSenderCSV {
27 : 
28 :   public static void main(String[] args) {
29 :     try {
30 :       String mapid = args[0];
31 :       String csv = args[1];
32 : 
33 :       Properties prop = new Properties();
34 :       prop.load(new FileInputStream("sample.properties"));
35 :       String HOST = prop.getProperty("HOST");
36 :       String USER = prop.getProperty("USER");
37 :       String PASS = prop.getProperty("PASS");
38 :       String HANDLER_ID = prop.getProperty("HANDLER_ID");
39 : 
40 :       Connection connection = new Connection(HOST, USER, PASS,
41 :           Connection.EXCHANGE_MODE_DIRECT, null, null, null,
42 :           HANDLER_ID);
43 :       DirectMessageExchanger exchanger = new DirectMessageExchanger(
44 :           connection, Configuration.getInstance());
45 : 
46 :       MapRuleStore store = new MapRuleStore(System.getProperty("user.dir")
47 :           + File.separator, "mapRule");
48 :       SampleUtils.println("Mapping :" + store.size());
49 :       Mapping mapping = store.getMapping(mapid);
50 :       store.fillMappingBaseDir(mapping);
51 :       SampleUtils.println("Mapping :" + mapping.toString());
52 :       Parser parser = new ParserImpl();
53 :       RecordSet record = parser.parse(new FileReader(csv), ',', '\'', true);
54 :       TranslatorFactory factory = new TranslatorFactory();
55 :       Translator translator = factory.newTranslator(mapping);
56 :       translator.setTargetDocument(record);
57 :       translator.translate();
58 :       ServiceContent sc = translator.getResultAsServiceContent();
59 : 
60 :       Session session = new InitiationSession(new PayloadContainer(
61 :           new Date(), sc.getFromRole()
62 :               .getGlobalBusinessIdentifierNorm(), sc.getToRole()
63 :               .getGlobalBusinessIdentifierNorm(), (new UID())
64 :               .toString(), sc, null));
65 :       SampleUtils.printSessionState("created", session);
66 :       PayloadContainer request = session.getMessageToSend();
67 :       SampleUtils.printSessionState("got", session);
68 :       SampleUtils.printContainerInformation(request);
69 :       SampleUtils.printServiceContent(request.getServiceContent());
70 :       new Validator(request.getServiceContent().getElement()).validate();
71 :       exchanger.sendMessage(request);
72 :       SampleUtils.printSessionState("sent", session);
73 : 
74 :       int time = 0;
75 :       boolean loop = true;
76 :       while (loop) {
77 :         Thread.sleep(5000);
78 :         exchanger.hit();
79 :         SampleUtils.printSessionState("loop=" + time++, session);
80 : 
81 :         Container container = exchanger.receiveMessage();
82 :         if (container != null) {
83 :           SampleUtils.printContainerInformation(container);
84 :           session.pushStatus((StatusContainer) container);
85 :           SampleUtils.printSessionState("pushed", session);
86 :           loop = false;
87 :         }
88 :       }
89 : 
90 :     } catch (Exception e) {
91 :       e.printStackTrace();
92 :     }
93 :   }
94 : 
95 : }

Mappingの取得

XMLからServiceContentへの変換と同様、CSVからServiceContentへの変換にもXSLTファイルおよびMappingの仕組みを使用します。Mappingの取得方法は通常と同じです。

46 :       MapRuleStore store = new MapRuleStore(System.getProperty("user.dir")
47 :           + File.separator, "mapRule");
49 :       Mapping mapping = store.getMapping(mapid);
50 :       store.fillMappingBaseDir(mapping);

なお、CSVは以下のようなXML形式に置き換えられ、読み込まれます。XSLTは、XML to ServiceContentとして変換処理を定義します。

【CSVの例】

AAABBBCCC
a1b1c1
a2b2c2

【CSVに相当するXMLのイメージ】

<csv>
    <row>
        <AAA>a1</AAA>
        <BBB>b1</BBB>
        <CCC>c1</CCC>
    </row>
    <row>
        <AAA>a2</AAA>
        <BBB>b2</BBB>
        <CCC>c2</CCC>
    </row>
    ・・・
</csv>

CSVの読み込み

CSVを読み込みます。カンマ以外のセパレータを指定することもできます。読み込まれたCSVはRecordSetにより扱えます。

52 :       Parser parser = new ParserImpl();
53 :       RecordSet record = parser.parse(new FileReader(csv), ',', '\'', true);
関連クラス機能
com.ados.hestia.utils.csv.ParserCSVを読み込むインターフェイス。
com.ados.hestia.utils.csv.ParserImplParserの実装クラス。
com.ados.hestia.utils.csv.RecordSetParserで読み込まれたCSVを表すクラス。

変換とServiceContentの取得

CSVをServiceContentへ変換します。まず、変換を行うTranslatorをTranslatorFactoryから生成します。TranslatorにはMappingが設定されます。

54 :       TranslatorFactory factory = new TranslatorFactory();
55 :       Translator translator = factory.newTranslator(mapping);

変換されるRecordSetを入力します。

56 :       translator.setTargetDocument(record);

XSLT変換を実行します。

57 :       translator.translate();

変換結果のServiceContentを取得します。

58 :       ServiceContent sc = translator.getResultAsServiceContent();

ServiceContentの生成後は、通常の処理によりHestiaへ送信します。ただし、ServiceContentの生成後に、 ServiceContent#setElementValue等のメソッドにより値を上書きすることもできます。


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved.