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

【受信したServiceContentをXMLファイルに変換し、出力】

目次

概要

受信したServiceContentをXSLT変換する方法について解説します。

サンプルプログラム全体を以下に示します。

【PIPReceiverStoredMap.java】

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

Mappingの選択

MapRuleStoreに登録されているMappingを選択します。Mappingが複数ある場合、受信したServiceContentに対して、どのMappingを使用するか選択する必要があります。

74 :           Mapping mapping = null;
75 :           Iterator iter = store.getRuleIDs().iterator();
76 :           while (iter.hasNext()) {
77 :             String mapid = (String) iter.next();
78 :             mapping = store.getMapping(mapid);
79 :             if (mapping.getPipId().equals(sc.getPIPID())
80 :                 && mapping.getPipVersion().equals(
81 :                     sc.getFullVersion())
82 :                 && mapping.getDirection().equals(
83 :                     Mapping.RNBM2RNBM)) {
84 :               store.fillMappingBaseDir(mapping);
85 :               ・・・
86 :               break;
87 :             }
88 :           }

選択基準は任意ですが、このサンプルでは以下の表のような値を基準にMappingを選択しています。

Mappingのメソッド取得する値MapRuleStoreファイルの対応要素
getPipIdPIP名pipid
getPipVersionPIPバージョンpipVersion
getDirection変換の方向direction

XSLT変換の実行

TranslatorをTranslatorFactoryから生成します。TranslatorにはMappingが設定されます。

89 :           TranslatorFactory factory = new TranslatorFactory();
90 :           Translator translator = factory.newTranslator(mapping);

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

91 :           translator.setTargetDocument(sc);

XSLT変換を実行します。

92 :           translator.translate();

結果のXMLの出力

変換結果をReader形式で取得します。

93 :           Reader reader = translator.getResultReader();

Readerから変換結果を読み込みます。このサンプルでは、Readerにより文字を読み込み、Writerにより逐一出力しています。

107 :           Writer writer = new FileWriter(filename);
108 :           int c;
109 :           while ((c = reader.read()) != -1) {
110 :             writer.write(c);
111 :           }
112 :           reader.close();
113 :           writer.close();

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Mon, 24 Oct 2005 17:12:01 JST (4991d)

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