[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 : }

マッピングルールの特定

マッピングルールはメッセージのタイプ(PIP種別、PIPバージョン、パートナー運用フォーマット)ごとに用意されます。PIPを受信した時点では、そのPIPメッセージに、どのマッピングルールを適用すべきか特定されていません。そこで、PIP名等により適用するマッピングルールを特定します。

MapRuleStoreに登録されているマッピングルールを一つ一つ検索し、PIP名等の判定を行います。PIPメッセージに合うマッピングルールが特定されれば、ループを抜け出します。

Mapping mapping = null; Iterator iter = store.getRuleIDs().iterator(); while (iter.hasNext()) {

   mapping = (Mapping)iter.next();
   if(mapping.getPipId().equals(sc.getPIPID()) &&
      mapping.getPipVersion().equals(sc.getFullVersion()) &&
      mapping.getDirection().equals(Mapping.RNBM2TABLE)){
       store.fillMappingBaseDir(mapping);
       break;
   }

}

変換とCSVソースの取得

特定されたマッピングルールと受信したServiceContentを入力し、CSVに変換します。変換したCSVはReaderとして取得できます。

TranslatorFactory factory = new TranslatorFactory(); Translator translator = factory.newTranslator(mapping); translator.setTargetDocument(sc); translator.translate(); Reader reader = translator.getResultReader();

ファイルへの保存

Readerから他のリソースへの出力は、一般的なJavaプログラミングによって行います。

String filename = ・・・; Writer writer = new FileWriter(filename); int c; while *1 != -1) {

   writer.write(c);

} reader.close(); writer.close();


*1 c = reader.read(

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

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