- 追加された行はこの色です。
- 削除された行はこの色です。
RIGHT:[[目次>Hestia Hacks]]|[[前>CSVファイルを入力してServiceContentに変換し、送信]]|[[次>RJOによるServiceContentの作成]]
#freeze
RIGHT:[[目次>Hestia Hacks#SDKDevDuide]]|[[前>CSVファイルを入力してServiceContentに変換し、送信]]|[[次>RJOによるServiceContentの作成]]
目次
#contents
*概要 [#e3011dc1]
受信した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 [#z63761e6]
XSLTでCSVを直接出力するのではなく、以下のようなXMLに変換するXSLT文書を定義します。
XSLTでは、CSVを直接出力するのではなく、以下のようなXMLを出力します。
【CSVに相当するXMLのイメージ】
【XSLTで出力する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】
|AAA|BBB|CCC|h
|a1|b1|c1|
|a2|b2|c2|
*CSVの出力 [#x8e0503e]
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();
|関連クラス|機能|h
|com.ados.hestia.utils.csv.CSVWriter|CSVを出力するインターフェイス。|
|com.ados.hestia.utils.csv.CSVWriterImpl|CSVWriterの実装クラス。|