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

目次||

目次

概要

受信したPIPメッセージのServiceContentを、バックエンドに入力するCSVファイルに変換する方法を解説します。

【PIPReceiverCSV.java】

1 : import java.io.File;
2 : import java.io.FileInputStream;
3 : import java.io.FileWriter;
4 : import java.util.Iterator;
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.exchange.Container;
10 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer;
11 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer;
12 : import com.ados.hestia.parser.rnbm.particle.ServiceContent;
13 : import com.ados.hestia.repository.MapRuleStore;
14 : import com.ados.hestia.repository.Mapping;
15 : import com.ados.hestia.sdk.Configuration;
16 : import com.ados.hestia.sdk.Connection;
17 : import com.ados.hestia.sdk.message.DirectMessageExchanger;
18 : import com.ados.hestia.sdk.session.RespondSession;
19 : import com.ados.hestia.sdk.session.Session;
20 : import com.ados.hestia.utils.csv.CSVWriter;
21 : import com.ados.hestia.utils.csv.CSVWriterImpl;
22 : import com.ados.hestia.utils.csv.RecordSet;
23 : 
24 : public class PIPReceiverCSV {
25 : 
26 :   public static void main(String[] args) {
27 :     try {
28 :       Properties prop = new Properties();
29 :       prop.load(new FileInputStream("sample.properties"));
30 :       String HOST = prop.getProperty("HOST");
31 :       String USER = prop.getProperty("USER");
32 :       String PASS = prop.getProperty("PASS");
33 :       String HANDLER_ID = prop.getProperty("HANDLER_ID");
34 :       String DIR = System.getProperty("user.dir") + File.separator
35 :           + "output" + File.separator + "csv";
36 : 
37 :       Connection connection = new Connection(HOST, USER, PASS,
38 :           Connection.EXCHANGE_MODE_DIRECT, null, null, null,
39 :           HANDLER_ID);
40 :       DirectMessageExchanger exchanger = new DirectMessageExchanger(
41 :           connection, Configuration.getInstance());
42 : 
43 :       MapRuleStore store = new MapRuleStore(System
44 :           .getProperty("user.dir")
45 :           + File.separator, "mapRule");
46 :       SampleUtils.println("Mapping :" + store.size());
47 : 
48 :       new File(DIR).mkdirs();
49 :       int time = 0;
50 :       boolean loop = true;
51 :       while (loop) {
52 :         Thread.sleep(5000);
53 :         SampleUtils.println("loop : " + time++);
54 :         exchanger.hit();
55 : 
56 :         Container container = exchanger.receiveMessage();
57 :         if (container != null) {
58 :           SampleUtils.printContainerInformation(container);
59 :           PayloadContainer request = (PayloadContainer) container;
60 :           ServiceContent sc = request.getServiceContent();
61 :           SampleUtils.printServiceContent(sc);
62 :           Session session = new RespondSession(request
63 :               .getRemotePartner(), request.getPIPID());
64 :           SampleUtils.printSessionState("created", session);
65 :           session.pushMessage(request);
66 :           SampleUtils.printSessionState("pushed", session);
67 :           session.acceptPartnerMessage();
68 :           SampleUtils.printSessionState("accepted", session);
69 :           StatusContainer status = session.getStatusToSend();
70 :           SampleUtils.printSessionState("sent status", session);
71 :           SampleUtils.printContainerInformation(status);
72 :           exchanger.sendMessage(status);
73 :           exchanger.hit();
74 : 
75 :           Mapping mapping = null;
76 :           Iterator iter = store.getRuleIDs().iterator();
77 :           while (iter.hasNext()) {
78 :             String mapid = (String) iter.next();
79 :             mapping = store.getMapping(mapid);
80 :             if (mapping.getPipId().equals(sc.getPIPID())
81 :                 && mapping.getPipVersion().equals(
82 :                     sc.getFullVersion())
83 :                 && mapping.getDirection().equals(
84 :                     Mapping.RNBM2TABLE)) {
85 :               store.fillMappingBaseDir(mapping);
86 :               SampleUtils.println(mapid);
87 :               break;
88 :             }
89 :           }
90 :           TranslatorFactory factory = new TranslatorFactory();
91 :           Translator translator = factory.newTranslator(mapping);
92 :           translator.setTargetDocument(sc);
93 :           translator.translate();
94 :           RecordSet record = translator.getResultAsRecordSet();
95 :           String filename = DIR
96 :               + File.separator
97 :               + sc.getPIPID()
98 :               + "_"
99 :               + sc.getVersion()
100 :               + "_"
101 :               + sc.getFromRole()
102 :                   .getGlobalBusinessIdentifierNorm()
103 :               + "_"
104 :               + sc.getDocumentGenerationDateTime()
105 :                   .getRNDateTime() + "_"
106 :               + sc.getDocumentIdentifier() + ".csv";
107 :           SampleUtils.println(filename);
108 :           CSVWriter writer = new CSVWriterImpl();
109 :           FileWriter fwriter = new FileWriter(filename);
110 :           writer.write(fwriter, ',', '\'',
111 :               CSVWriter.QuotedStrategy.FIELDS_WITH_SPACE, true,
112 :               record);
113 :           fwriter.close();
114 : 
115 :           loop = false;
116 :         }
117 :       }
118 : 
119 :     } catch (Exception e) {
120 :       e.printStackTrace();
121 :     }
122 :   }
123 : 
124 : }

ServiceContentをCSVに変換するXSLT

XSLTでCSVを直接出力するのではなく、以下のようなXMLに変換するXSLT文書を定義します。

【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】

AAABBBCCC
a1b1c1
a2b2c2

CSVの出力

Mappingの選択やXSLTの実行の方法は、XMLへ変換する場合と同じです。変換結果をRecordSetで取得する点のみ異なります。

94 :           RecordSet record = translator.getResultAsRecordSet();

CSVWriterを使用して、RecordSetをCSV形式に出力します。

108 :           CSVWriter writer = new CSVWriterImpl();
109 :           FileWriter fwriter = new FileWriter(filename);
110 :           writer.write(fwriter, ',', '\'',
111 :               CSVWriter.QuotedStrategy.FIELDS_WITH_SPACE, true,
112 :               record);
113 :           fwriter.close();
関連クラス機能
com.ados.hestia.utils.csv.CSVWriterCSVを出力するインターフェイス。
com.ados.hestia.utils.csv.CSVWriterImplCSVWriterの実装クラス。

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

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